Cコードで大きなファイル(4-8 GB)を生成しようとしています。 今私はファイルバイナリを開くために'wb'
パラメータとfopen()
を使用し、ファイルにバイトを書き込むためにfor
ループにfwrite()
関数を使用します。私はすべてのループ反復で1バイトを書いています。ファイルが4294967296バイト(4096 MB)以上になるまで問題はありません。開かれたファイルに書き込むときにはまだRAMにあるため、32ビットOSのメモリの上限のように見えます。私は正しい?症状は、作成したファイルのサイズが私が望むサイズよりも小さいことです。その差は4096MBである。 6000 MBのファイルが必要な場合、6000 MB〜4096 MB = 1904 MBのファイルが作成されます。32ビットシステムの大きなファイルの代替fwrite()代替
あなたは他の方法でその作業を行うことを提案できますか?
よろしく:)コードの
パート:
unsigned long long int number_of_data = (unsigned int)atoi(argv[1])*1024*1024; //MB
char x[1]={atoi(argv[2])};
fp=fopen(strcat(argv[3],".bin"),"wb");
for(i=0;i<number_of_data;i++) {
fwrite(x, sizeof(x[0]), sizeof(x[0]), fp);
}
fclose(fp);
「i」はどのように定義されていますか? – willys
'strcat(argv [3]、"。bin ")'が間違っています – BLUEPIXY
@willys 'i'は次のように定義されています:' unsigned long long int i = 0; ' – bLAZ