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
スタックオーバーフローがヒントになった (((・ω・)))
Comments