2016-11-04 9 views
0

シーク後に書き込むデータがあることを保証できる場合は、ファイルの先頭にバイトを予約するのに、fseekを使用しても安全ですか?例:fseekで安全なスペースを予約していますか?

// reserve space 
fseek(f, 4096, SEEK_SET); 

// ... 

// write some data after the reserved space 
fwrite(buf, 1, bufsize, f); 

// go back to the reserved space (to update it) 
rewind(f); 

// ... 

Windowsで動作することがわかりましたが、他のプラットフォームはどうですか?そこには何か見逃しがありますか?

+0

それは、 Unix上の領域を予約しません。あなたが出力を書き出してフラッシュするまで、実際にファイルに何も起こりません。 – Barmar

答えて

1

はい、うまくいきます。 wまたはw+モードでファイルを開いた場合は、aまたはa+ではなく、ファイル内の任意のポイントを検索してそこに書き込むことができ、ファイルのその時点で書き込みます。ファイルの他の部分は変更されません。書き込まれなかった場合、ゼロバイトが含まれます。だから、

あなただけの(最初のファイルを切り捨て)wモードで開かれたファイルに次の手順を実行している場合:

fseek(f, 10, SEEK_SET); 
fwrite("abc", 1, 3, f); 
rewind(f); 
fwrite("1234567890", 1, 10, f); 

ファイルの内容は次のようになります。

1234567890abc 
+0

ああ、ダン、ディスク容量についての良い点。私は 'fwrite'を将来の標準にするつもりです。 – user966939

+0

私はディスク容量のチェックが全然理由があると仮定しました。スペースを "予約する"ことは他に何を意味しますか? – Barmar

+0

私は後で更新する必要があるファイル形式ヘッダーの領域を予約しています。 – user966939

関連する問題