解決策は、記録後にデータをディスクに強制的にフラッシュすることで見つかりました。
同じコンテンツ「12345」で2つのファイルを作成し、次のコードを実行します。
#include <stdio.h>
#include <assert.h>
int main ()
{
char byte1 = 'b' ;
char byte2 = 'b' ;
FILE * f1 = fopen ( "1" , "r+b" );
FILE * f2 = fopen ( "2" , "r+b" );
assert ( f1 != NULL );
assert ( f2 != NULL );
fseek ( f1 , 1 , SEEK_SET );
fseek ( f2 , 1 , SEEK_SET );
fwrite (& byte1 , sizeof ( char ), 1 , f1 );
fread (& byte1 , sizeof ( char ), 1 , f1 );
fwrite (& byte2 , sizeof ( char ), 1 , f2 );
fflush ( f2 );
fread (& byte2 , sizeof ( char ), 1 , f2 );
fclose ( f1 );
fclose ( f2 );
return 0 ;
}
その結果、最初のファイルの内容は「1b?45」(「?」はランダムバイト、私は0x01、友人は「H」)、2番目は「1b345」です。 ご覧のとおり、最初のファイルが破損しています。 そのため、fwrite / freadでの書き込み/読み取りには注意してください。