files – ¿Las interfaces de llamada al sistema típicas permiten reducir el tamaño de un archivo (sin reemplazarlo con un inodo diferente)?

Pregunta:

¿Hay alguna forma de open() un archivo y hacer que se reduzca? Por supuesto, uno puede abrirlos en modo adjunto o buscar el final y escribir para hacer que crezcan. Sin embargo, hasta donde yo sé, no existe un método para reducir un archivo a través de las típicas interfaces de llamada al sistema de estilo Unix.

La única forma de hacerlo, hasta donde yo sé, es falsificarlo creando un nuevo archivo más corto y rename() en lugar del anterior.

Solo quería confirmación, porque vi una respuesta que implicaba que era posible crear editores de archivos que funcionaran directamente en un archivo en lugar de pasar por el proceso de crear uno nuevo y cambiarle el nombre en su lugar.

Siempre he pensado que la API de archivos en libc y las interfaces de llamada al sistema de estilo Unix no permitían la reducción de archivos para facilitar la implementación de sistemas de archivos y tal vez evitar patrones de uso que podrían contribuir a la fragmentación.

Respuesta:

man -s 2 ftruncate dice

DESCRIPTION
   The  truncate()  and  ftruncate()  functions cause the regular file
   named by path or referenced by fd to be truncated to a size of precisely
   length bytes.

CONFORMING TO
   POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (these calls first appeared in 4.2BSD).

continúa diciendo que si usa ftruncate, debe haber abierto el archivo para escribir, y si usa truncate, el archivo debe tener permisos de escritura.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım