Quando chiamiamo close(<fd>)
, fa automaticamente il fsync()
per la sincronizzazione con il supporto fisico?fa close() chiama fsync() su Linux?
risposta
Non funziona. Chiamare close()
NON garantisce che i contenuti siano sul disco in quanto il sistema operativo potrebbe aver rinviato le scritture.
Come nota a margine, controllare sempre il valore restituito di close()
. Ti farà sapere di eventuali errori rinviati fino a quel momento. E se vuoi assicurarti che i contenuti siano sul disco chiama sempre fsync()
e controlla anche il suo valore di ritorno.
Una cosa da tenere a mente è il backing store. Ci sono dispositivi che possono eseguire differimenti di scrittura interni e il contenuto può essere perso in alcuni casi (anche se i nuovi dispositivi di archiviazione di solito dispongono di super condensatori per impedirlo, o modi per disabilitare questa funzione).
No.
Da man 2 close
Un successo stretta non garantisce che i dati sono stati salvato con successo su disco, come il kernel rinvia scritture. È non è comune per un file system per svuotare i buffer quando il flusso viene chiuso. Se è necessario essere sicuri che i dati siano memorizzati nello stato fisico , utilizzare fsync (2). (Dipenderà l'hardware del disco, a questo punto.)
Da man 2 close
:
Un successo stretta non garantisce che i dati sono stati salvato con successo su disco, come il kernel rinvia scrive . Non è comune per un file system per svuotare i buffer quando lo stream è chiuso. Se è necessario accertarsi che i dati siano archiviati fisicamente, utilizzare fsync (2). (Dipenderà sul disco hard-ware, a questo punto.)
Per rispondere alla tua domanda, NO, close()
non garantisce fsync()
close
chiude solo il descrittore di file per il processo e rimuove eventuali blocchi di record associati al processo.
- 1. fsync, sync: fa davvero quello che dovrebbe?
- 2. Sostituzione della funzione close() in Linux con la mia funzione close()
- 3. Transizione tra l'elemento close close close
- 4. Detect Browser Close su Asp.net
- 5. Esegui funzione su JFrame close
- 6. Perché QCoreApplication chiama `setlocale (LC_ALL," ")` di default su Unix/Linux?
- 7. jQuery UI 1.7.1 Modal Close su overlay Fare clic su
- 8. WinForms Close() imposta DialogResult su Annulla
- 9. Devo chiamare Close() su un ManualResetEvent?
- 10. JavaFX: Stage close handler
- 11. PHP e MySQLi close()
- 12. Cosa fa un tipico ./configure in Linux?
- 13. cosa fa questo comando linux: "cd !!: 1"
- 14. O_DIRECT vs. O_SYNC su Linux/FreeBSD
- 15. su Linux
- 16. Override NSWindow close button
- 17. catch close gtk.window
- 18. CKEditor close dialog
- 19. Per che cosa è il fsync di MongoDB?
- 20. Come posso gestire l'evento Close in Socket.io?
- 21. mysqli - Ho davvero bisogno di fare $ result-> close(); & $ mysqli-> close() ;?
- 22. JFrame On Close Operation
- 23. Doctrine 2 Close Connection
- 24. PHP: close output stream
- 25. Quando chiamare response.body(). Close()
- 26. DialogFragment Close Evento
- 27. angularjs $ modal close modal
- 28. C# close standard out
- 29. Reindirizza su Ajax Jquery Chiama
- 30. Installazione nloptr su Linux
Chiamare 'fsync()' * non *, per gli stessi motivi (l'hardware potrebbe rinviare le scritture). –
@ FrédéricHamidi 'fsync()' impone le scritture all'archiviazione, in quali condizioni fsync non garantisce i contenuti sul disco (eccetto errori dispari e scritture differite hardware che in alcuni casi non possono essere controllati)? –
Ci potrebbe essere (e di solito è) un altro livello di cache nel controller del disco, quindi anche 'fsync()' non può garantire che i dati siano stati apportati all'hardware effettivo. La [man page] (http://linux.die.net/man/2/close) per 'close()' lo menziona. –