Existe uma maneira de open()
um arquivo e fazê-lo encolher? Pode-se, é claro, abri-los no modo de acréscimo ou procurar até o fim e escrever para fazê-los crescer. No entanto, até onde eu sei, não há método para reduzir um arquivo por meio de interfaces típicas de chamada de sistema no estilo unix.
A única maneira de fazer isso, até onde eu sei, é fingindo, criando um novo arquivo mais curto e rename()
substituindo o antigo.
Eu só queria uma confirmação, porque vi uma resposta que sugeria que era possível fazer editores de arquivos que funcionassem diretamente em um arquivo em vez de passar pelo processo de criar um novo e renomeá-lo no local.
Eu sempre pensei que a api de arquivo nas interfaces de chamada de sistema libc e unix não permitia a redução de arquivos para facilitar a implementação de sistemas de arquivos e talvez evitar padrões de uso que possam contribuir para a fragmentação.
man -s 2 ftruncate
diz...
ele continua dizendo que se você usar ftruncate você deve ter aberto o arquivo para escrita, e se você usar truncate o arquivo deve ser gravável.
A
open(2)
chamada do sistema aceita oO_TRUNC
sinalizador que pode reduzir o tamanho do arquivo:É frequentemente usado quando o programa visa sobrescrever totalmente o conteúdo de um arquivo. Um exemplo é o operador de redirecionamento de arquivos do seu shell como em
command > file
.