のおかげであなたはすべての書き込みがストレージにコミットしていると、ファイルシステムが更新されていることを確認したい場合は、次のファイルディスクリプタの
- コールfsync()、
- オープン親ディレクトリとそのファイル記述子のfsync()を呼び出す
これらの両方が実行されると、 rnelはメモリからすべてをフラッシュし、あなたが操作しているファイルに関してファイルシステムが確実に更新されるようにします。
sync()を呼び出すと、すべてのカーネルデータがすべてのファイルとファイルシステムのメタデータの記憶域に書き込まれることが保証されます。
注:
アプリケーションがFILE *の代わりに、ファイルディスクリプタで作業している場合は、あなたが最初に書き込まれたデータを確認する必要がありますが、カーネルに、アプリケーションからフラッシュされ、いずれかにfflushを呼び出すことによって()またはfcloseをFILE *
アプリケーションを終了すると、実行した書き込み操作は中止されず、中断されず、sync()を呼び出すか、同じファイルを開いてfsync )それに。
アプリケーションを任意に終了させると、すべてが一貫しているとは思えません。アプリケーションがデータベース、設定ファイルなどに2回重要な書き込みを行っていた可能性があります。そのフォーマットに従って破損することがあります。
出典
2017-05-25 14:46:00
nos
私の質問に完全に答えてくれてありがとう。 sync()は、アプリケーションがすべてのコピー/書き込み操作を直接制御しているわけではないため、必要なものです(関連するすべてのファイル記述子がわからないため)。 – Andre