Sto scrivendo un programma che gira sia su Linux che su FreeBSD, e voglio assicurarmi che i dati siano effettivamente scritti sul file sul dispositivo fisico quando ogni write()
restituisce, quindi che i miei dati non si perderanno per caso (ad esempio, perdita di alimentazione, interruzione del processo inaspettata, ecc.).O_DIRECT vs. O_SYNC su Linux/FreeBSD
Secondo la pagina man OPEN (2), su Linux (superiore a 2.6), O_DIRECT
è sincrono ma potrebbe presentare problemi di prestazioni; su FreeBSD, O_DIRECT
non è garantito sincrono e potrebbe anche presentare problemi.
Quindi, su Linux, sia O_DIRECT
o O_SYNC
garantisce la scrittura sincrona, ma quale ha prestazioni migliori?
In FreeBSD, per garantire scrittura sincrona, quale opzione ha le migliori prestazioni: (1) O_DIRECT
+ fsync()
(2) O_DIRECT | O_SYNC
o (3) da solo O_SYNC
?
Penso che non si possa paragonarli affatto, dal momento che sono fondamentalmente cose diverse (anche se sembrano "fare qualcosa di simile"). – Damon