C'è un modo per open()
un file e farlo restringere? Naturalmente, è possibile aprirli in append-mode o cercare fino alla fine e scrivere per farli crescere. Tuttavia, per quanto ne so, non esiste un metodo per ridurre un file tramite le tipiche interfacce di chiamata di sistema in stile unix.
L'unico modo per farlo, per quanto ne so, è falsificarlo creando un nuovo file più corto e rename()
al posto di quello più vecchio.
Volevo solo una conferma, perché ho visto una risposta che implicava che era possibile creare editor di file che funzionavano direttamente su un file invece di passare attraverso il processo di creazione di uno nuovo e rinominarlo in atto.
Ho sempre pensato che l'API di file nelle interfacce di chiamata di sistema in stile libc e unix non consentisse la riduzione dei file per facilitare l'implementazione dei filesystem e forse evitare schemi di utilizzo che potrebbero contribuire alla frammentazione.
open()
e openat()
ho già un flag per il troncamento, O_TRUNC
quindi tecnicamente provoca la riduzione del file, ovvero la riduzione completa, senza cambiare l'inode. L'esempio più famoso è quello in command > file.txt
cui il file verrà troncato se esiste. Se corri strace
, bash -c 'true > /dev/null'
vedrai openat(AT_FDCWD, "/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666)
nell'output. Naturalmente per dimensioni variabili del troncamento è necessario truncate()
syscall. Fammi sapere se vuoi questo come una risposta effettiva invece del commento.
fopen
in modalità "w" (o "w +") per troncarlo automaticamente a lunghezza zero. O intendi ridurre a una dimensione diversa da zero, per preservare alcuni dei vecchi contenuti?