書き込み用にファイルを開いた後:
FILE *file = fopen("./file", "w");
ファイルがすぐに作成されたと想定できますか?電話しても安全ですか:
stat( "./file", info);
または私はもっと良いはずです:
fflush(file);
また
fclose(file);
予め?
編集:fopen呼び出し後にNULL以外のファイルを想定
fopenのマニュアルページには次のように書かれています:
モードが w、wb、a、ab、w+、wb+、w+b、a+、ab+、または a+b であり、ファイルが以前に存在しなかった場合、正常に完了すると、fopen() 関数は更新のマークを付けます。ファイルの st_atime、st_ctime、および st_mtime フィールドと、親ディレクトリの st_ctime および st_mtime フィールド。
したがって、 fopen 呼び出しが成功した直後にファイルを stat しても安全だと思います。
はい、論理的にはできます。読み取り専用ファイルシステムに書き込むためにファイルを開くと失敗します。これは、fopen()/open() が必要なチェックを行うことを示しています。確認する他の方法は、 open() の O_EXCL フラグと同様に xでファイルを開くことです。
への呼び出しfopen
が成功した場合は、ファイルが作成されたことを意味します。ただし、ファイルはディスクにコミット (フラッシュ) されない場合があります。stat
ただし、次の の呼び出しでカーネル バッファからファイルが取得されるため、これについて心配する必要はありません。
したがって、この特定のケースではanfflush
または anは必要ありません。fclose
ディスクへのフラッシュについて頭を悩ませる必要があるのは、システムがクラッシュする可能性がある場合です。この場合、 などを使用してデータをディスクに完全にコミットしていないfsync
と、次回のシステム再起動時にデータが失われる可能性があります。