2

書き込み用にファイルを開いた後:

FILE *file = fopen("./file", "w");

ファイルがすぐに作成されたと想定できますか?電話しても安全ですか:

 stat( "./file", info);

または私はもっと良いはずです:

 fflush(file);

また

 fclose(file);

予め?

編集:fopen呼び出し後にNULL以外のファイルを想定

4

3 に答える 3

2

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 しても安全だと思います。

于 2012-04-19T12:02:26.813 に答える
1

はい、論理的にはできます。読み取り専用ファイルシステムに書き込むためにファイルを開くと失敗します。これは、fopen()/open() が必要なチェックを行うことを示しています。確認する他の方法は、 open() の O_EXCL フラグと同様に xでファイルを開くことです。

于 2012-04-19T12:10:00.263 に答える
1

への呼び出しfopenが成功した場合は、ファイルが作成されたことを意味します。ただし、ファイルはディスクにコミット (フラッシュ) されない場合があります。statただし、次の の呼び出しでカーネル バッファからファイルが取得されるため、これについて心配する必要はありません。

したがって、この特定のケースではanfflushまたは anは必要ありません。fclose

ディスクへのフラッシュについて頭を悩ませる必要があるのは、システムがクラッシュする可能性がある場合です。この場合、 などを使用してデータをディスクに完全にコミットしていないfsyncと、次回のシステム再起動時にデータが失われる可能性があります。

于 2012-04-19T12:17:14.310 に答える