2015-03-25 24 views
5

Esiste un modo per eseguire il dump di un buffer sul file atomicamente?Scrittura atomica su file su linux

Per "atomicamente" intendo: se per esempio qualcuno termina la mia domanda durante la scrittura, mi piacerebbe avere un file in uno stato precedente o successivo alla scrittura, ma non in uno stato intermedio corrotto.

Se la risposta è "no", probabilmente si potrebbe fare con buffer molto piccoli? Ad esempio, posso scaricare 2 variabili int32_t conseguenti con un singolo 8 byte fwrite (su piattaforma x64), ed essere sicuro che entrambi gli int32s vengano scaricati, o nessuno di essi, ma non solo uno di essi?

+0

Penso che sia necessario esaminare "Segnali" unix. I segnali di trapping ti permetteranno di sapere quando la tua app viene chiusa. L'unica cosa che non puoi rilevare è un 'kill -9' che abbatte il tuo programma senza emettere un segnale. –

+11

Una soluzione normale consiste nel lavorare su una copia del file e scambiarli atomicamente alla fine. –

+3

D'accordo con @MarcGlisse, l'unico modo garantito per prevenire la corruzione è scrivere un nuovo file e spostare il nuovo file su quello vecchio quando il nome è atomico. –

risposta

0

Può valere la pena di controllare signal.h (libreria c standard), per la gestione di situazioni come questa. Tieni presente che la filettatura potrebbe richiedere alcune protezioni aggiuntive.