2017-05-25 3 views
1

私たちはYoctoとLinuxカーネルディストリビューションを構築するiMX6Sxフリースケールボードに取り組んでいます。 ファイルシステムの操作(特に書き込み)がのように終了しているかどうかを確認し、操作の実行中にプロセスを終了/終了させないかどうかを確認する方法があるかどうかを確認したいと思います。ファイルシステム操作が実際に「フラッシュされた」

もっと明確にするには:私たちのアプリケーションがオフにしなければならないときに(ファイルのコピー、書き込みなど)何らかのアクションを実行する必要があります。本当に完了です。

事前 アンドレア

答えて

2

のおかげであなたはすべての書き込みがストレージにコミットしていると、ファイルシステムが更新されていることを確認したい場合は、次のファイルディスクリプタの

  • コールfsync()、
  • オープン親ディレクトリとそのファイル記述子のfsync()を呼び出す

これらの両方が実行されると、 rnelはメモリからすべてをフラッシュし、あなたが操作しているファイルに関してファイルシステムが確実に更新されるようにします。

sync()を呼び出すと、すべてのカーネルデータがすべてのファイルとファイルシステムのメタデータの記憶域に書き込まれることが保証されます。

注:

  • アプリケーションがFILE *の代わりに、ファイルディスクリプタで作業している場合は、あなたが最初に書き込まれたデータを確認する必要がありますが、カーネルに、アプリケーションからフラッシュされ、いずれかにfflushを呼び出すことによって()またはfcloseをFILE *

  • アプリケーションを終了すると、実行した書き込み操作は中止されず、中断されず、sync()を呼び出すか、同じファイルを開いてfsync )それに。

  • アプリケーションを任意に終了させると、すべてが一貫しているとは思えません。アプリケーションがデータベース、設定ファイルなどに2回重要な書き込みを行っていた可能性があります。そのフォーマットに従って破損することがあります。

+0

私の質問に完全に答えてくれてありがとう。 sync()は、アプリケーションがすべてのコピー/書き込み操作を直接制御しているわけではないため、必要なものです(関連するすべてのファイル記述子がわからないため)。 – Andre

関連する問題