Wenn wir anrufen, macht es automatisch fsync()
mit dem physischen Medium zu synchronisieren?Ruft close() fsync() unter Linux auf?
Antwort
Es nicht. Der Aufruf von close()
garantiert NICHT, dass sich Inhalte auf der Festplatte befinden, da das Betriebssystem die Schreibvorgänge möglicherweise zurückgestellt hat.
Als Randnotiz immer den Rückgabewert close()
überprüfen. Es wird Sie über alle bis zu diesem Zeitpunkt zurückgestellten Fehler informieren. Wenn Sie sicherstellen möchten, dass sich die Inhalte auf der Festplatte befinden, rufen Sie immer fsync()
auf und überprüfen Sie auch deren Rückgabewert.
Eine Sache zu beachten ist, was der Backing Store ist. Es gibt Geräte, die interne Schreibverzögerungen ausführen können und Inhalte können in einigen Fällen verloren gehen (obwohl neuere Speichermediengeräte typischerweise Superkondensatoren haben, um dies zu verhindern, oder Möglichkeiten, diese Funktion zu deaktivieren).
Nr
Von man 2 close
einem erfolgreichen Abschluss garantiert nicht, dass die Daten erfolgreich auf Festplatte gespeichert wurde, als der Kernel schreibt aufschiebt. Es ist nicht üblich für ein Dateisystem die Puffer zu löschen, wenn der Stream geschlossen ist. Wenn Sie sicher sein müssen, dass die Daten physikalisch gespeichert sind, verwenden Sie fsync (2). (Es wird an dieser Stelle auf der Festplatte Hardware abhängig.)
Von man 2 close
:
ein erfolgreichen Abschluss garantiert nicht, dass die Daten erfolgreich auf Festplatte gespeichert werden, als der Kernel schreibt aufschiebt . Es ist nicht üblich für ein Dateisystem, die Puffer zu leeren, wenn der Stream geschlossen ist. Wenn Sie sicherstellen müssen, dass die Daten physisch gespeichert werden, verwenden Sie fsync (2). (Es wird an dieser Stelle auf der Festplatte hart ware abhängen.)
Ihre Frage zu beantworten, NO, close()
garantiert nicht fsync()
close
nur die Beschreibungsdatei schließt für den Prozess und entfernt alle mit dem Prozess verbundenen Datensatzsperren.
- 1. Warum ruft QCoreApplication `setlocale (LC_ALL," ")` standardmäßig unter Unix/Linux auf?
- 2. wird Linux Fsync Datei Xattr synchronisieren?
- 3. XmlWriter: ruft Close() auf, wenn Sie einen using-Block verwenden?
- 4. Wie fsync auf einem ofstream zu tun?
- 5. Unterschied zwischen fflush und fsync
- 6. Unter welchen Umständen ruft TypeBuilder.CreateType AppDomain.OnTypeResolveEvent auf?
- 7. va_list Fehlverhalten unter Linux
- 8. Schriften auf org.eclipse.swt.widgets.Composite sind unter Linux
- 9. Zugriff auf SQLServer mit Node.js unter Linux
- 10. grundlegende Chat-System auf Perl unter Linux
- 11. Ersetzen Sie die Close() -Funktion in Linux mit meiner eigenen close() -Funktion
- 12. ASP.Net unter Linux
- 13. Squeak SMTPs unter Linux
- 14. GetTcpTable entspricht unter Linux
- 15. libswiftDemangle.so unter Linux
- 16. Benchmark-Programme unter Linux
- 17. Dokumentenverwaltung unter Linux
- 18. tchar.h unter Linux
- 19. ARM-Entwicklung unter Linux
- 20. Echtzeit-Audioanalyse unter Linux
- 21. Monitor Batteriestatus unter Linux
- 22. arpalert unter Linux
- 23. OpenCL Kompilieren unter Linux
- 24. pgmagick Installation unter Linux
- 25. C++ Flash unter Linux
- 26. windeployqt.exe unter Linux-Distributionen
- 27. Pseudozufälliger Stapelzeiger unter Linux?
- 28. Programmierung Webcam unter Linux
- 29. MASM unter Linux?
- 30. Traffic Shaping unter Linux
Aufruf von 'fsync()' * tut auch nicht *, aus den gleichen Gründen (die Hardware könnte die Schreibvorgänge zurückgestellt haben). –
@ FrédéricHamidi 'fsync()' erzwingt die Schreibvorgänge im Speicher, unter welchen Bedingungen würde fsync den Inhalt auf dem Datenträger nicht garantieren (außer ungeraden Fehlern und verzögerten Hardware-Schreibvorgängen, die in einigen Fällen nicht kontrolliert werden können)? –
Möglicherweise befindet sich (und normalerweise) eine weitere Cache-Schicht im Festplatten-Controller, so dass selbst 'fsync()' nicht garantieren kann, dass Ihre Daten die tatsächliche Hardware erreicht haben. Die [Manpage] (http://linux.die.net/man/2/close) für 'close()' erwähnt dies. –