close(<fd>)
と呼ぶと、自動的にfsync()
が物理メディアに同期しますか?Linuxではclose()がfsync()を呼び出しますか?
答えて
これはありません。 close()
を呼び出すと、OSが書き込みを延期している可能性があるため、内容がディスク上にあることを保証するものではありません。
補足として、常に戻り値close()
を確認してください。その時点までの遅延エラーをお知らせします。また、内容がディスク上にあることを確認したい場合は、常にfsync()
と呼び出して、その戻り値も確認してください。
覚えておくべきことの1つは、バッキングストアです。内部書き込み遅延を起こす可能性のあるデバイスが存在し、場合によってはコンテンツが失われる可能性があります(新しいストレージメディアデバイスでは通常、これを防止するためのスーパーキャパシタやこの機能を無効にする方法があります)。成功したクローズは、カーネルが書き込みを延期などのデータが 成功し、ディスクに保存されていることを保証するものではありません
号
から。ストリームが閉じられたときにファイルシステムがバッファをフラッシュするのは一般的ではありません。 データが 物理的に格納されていることを確認する必要がある場合は、fsync(2)を使用します。 (これは、この時点では、ディスクのハードウェアに依存します。)
をman 2 close
から:
成功に近いが、カーネルは書き込みを延期などのデータが 成功し、ディスクに保存されていることを保証するものではありません。ストリームが が閉じられたときに、バッファをフラッシュするファイルシステムに共通のものは ではありません。データが物理的に格納されていることを確認する必要がある場合は、 fsync(2)を使用してください。 (これは、この時点では、ディスクのハードウェアに依存します。)
は、あなたの質問に答えるために、NO、close()
をfsync()
close
が唯一のプロセスや削除しのためのファイルディスクリプタをクローズ保証するものではありません。プロセスに関連付けられたレコードロック。
- 1. MongoDBは(ジャーナリングを有効にして)いつfsync()を呼び出しますか?
- 2. ZipArchive :: close()を呼び出す - それは必要ですか?
- 3. boost asioサーバーがclose boost :: socketの呼び出しでハングアップする
- 4. linux fsyncはファイルのxattrを同期しますか?
- 5. IDataReader :: DisposeはIDataReader :: Closeを呼び出す必要がありますか?
- 6. HibernateCursorItemReaderのcloseメソッドの呼び出しに失敗しました
- 7. Linuxソケット呼び出しをトレースしていますか?
- 8. LinuxでPython IDLEを呼び出す
- 9. linuxでsedを呼び出す
- 10. defrecordコンストラクタで呼び出しを呼び出しますか?
- 11. クラスライブラリ/ファイルから呼び出しウィンドウフォームを閉じる方法は?呼び出しフォームにアクセスして.close()を実行する必要があります
- 12. サービスインタフェースでGetTypeを呼び出すと、呼び出しが発生しますか?
- 13. QT QCloseEventウィンドウXをクリックして閉じるclose()を呼び出します。
- 14. try-with-resourceを使用するとAssert closeが呼び出されます
- 15. Reader()でClose()を呼び出した後にMySqlDataReaderが閉じない
- 16. LinuxでJavaコードからC関数を呼び出すには
- 17. Lineインターフェイスでは、すべてのインスタンスに対してclose()を呼び出す必要があります。
- 18. azure QueueClientでclose()を呼び出すと、メッセージポンプが正常に停止しますか?
- 19. 新しいFileInputStream(templateFile)を作成しますか?初期化後にclose()を呼び出しますか?
- 20. close(fd)関数を呼び出さないとどうなりますか?
- 21. 致命的なエラー:booleanのメンバー関数close()を呼び出す
- 22. linuxクライアントからwindows DLLを呼び出すことはできますか?
- 23. リダイレクトはstdinが呼び出しを呼び出すのを期待します
- 24. jquery ui:初期化の前にダイアログのメソッドを呼び出すことはできません。メソッド 'close'を呼び出そうとしました
- 25. posix close呼び出しが失敗した場合の対処方法
- 26. 独自のsoftirqでlinuxカーネルを呼び出す方法はありますか
- 27. Kafka Producerを作成し、send()、flush()、close()メソッドを呼び出す正しい順序は何ですか?
- 28. Javaでファイルを書き込むときに最後にclose()を呼び出す必要がありますか?
- 29. linuxのシグナルの場合、whoはint 0x80を呼び出しますか?
- 30. Linux上のアセンブリコードからCライブラリを呼び出す方法は?
同じ理由で 'fsync()' *を呼び出すことは*ではありません(ハードウェアが書き込みを延期した可能性があります)。 –
@FrédéricHamidi 'fsync()'は、fsyncがどのような条件でディスク上の内容を保証しないのかを記憶域に強制的に書き込みます(場合によっては制御できない奇妙な失敗やハードウェアの遅延書き込みを除く)? –
ディスクコントローラ内に別のキャッシュ層があるかもしれないので、 'fsync()'でさえ、あなたのデータが実際のハードウェアにそれを行ったことを保証できません。 'close()'の[man page](http://linux.die.net/man/2/close)はこれについて言及しています。 –