Linuxでファイル操作の呼び出しを学んでいます。read()
そして、他の多くの機能はパフォーマンスを向上させるためにキャッシュを使用するため、キャッシュからディスクデバイスにデータを転送することが可能であることがwrite()
わかります。fsync()
しかし、データがキャッシュまたはディスクに書き込まれているかどうかを確認するためのコマンドまたはシステムコールはありますか?
答え1
データがすでに存在する場合にのみ、キャッシュからデータを(直接)読み込みます。これは、キャッシュされたデータが以前にプロセスによってアクセスされ、キャッシュに保存されたことを意味します。読み取るデータがすでにキャッシュ内にあるかどうかをプロセスに通知するシステム呼び出しや方法はありません。
一方、プロセスは記録されたデータを即座にディスクに保存するか、可変遅延の後にのみ保存するかを選択できます(通常の場合)。これは、ファイルを開くときにO_SYNCフラグを使用して行われます。
サポートされている場合、すべてのI / Oが読み取り/書き込みキャッシュをバイパスし、ディスクに直接アクセスできるようにするO_DIRECTフラグもあります。
最後に、ハードディスク自体は独自のキャッシュを自由に実装できるため、同期書き込み呼び出しが返された後でもデータがすでにディスクプラッタにあるという保証はありません。
答え2
fsync
この問題は問題のファイル(ディスクに書き込まれています)に対してすでに実行されていますが、ディレクトリに対して実行されるという保証はありません。これには追加のfsync呼び出しが必要です。