C標準ライブラリで SetEndOfFile を実現する

本当に困ったので、調べて実現してみました ・ω・

SetEndOfFile はファイルサイズを強制的に変更するWindowsAPI

排他制御の関係で、ファイルの中身を読み込んで、別の内容で上書きするような処理を1度のファイルのOpenでする場合のやり方です。

FILE *fp = fopen("filename.txt", "r+");
flock(fileno(fp), LOCK_EX);

fread(buffer, 1, file_size1, fp);
fseek(fp,0,SEEK_SET);        

cb = fwrite(buffer, 1, file_size2, fp);

ftruncate(fileno(fp), file_size1);
fclose(fp);
ファイルディスクリプタからFILE構造体に変換する場合 fileno を使うのがポイントらしい。

system calls - Linux set end of file (shrink, truncate, cut out some data @ end) - Stack Overflow
スタックオーバーフローがヒントになった (((・ω・)))

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です