MacOSXのライオン関数freadは、長さを持つファイルを読み込まないので> 2G(int型のサイズ、2'147'483'648バイト)。 これは、macosx snow leopardで何年も働いていました。FREADは読み取らない場合の長さ> 2G
私はそれをテストするためのプログラムを書いた:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fin = NULL, *fout = NULL;
char *ptr = NULL;
size_t len;
fpos_t flen;
if (!(fin = fopen(argv[1], "rb")))
{
printf("The input file: %s could not be opened\n", argv[1]);
return -1;
}
if ((fout = fopen(argv[2], "rb")))
{
printf("The output file %s already exist\n", argv[2]);
fclose(fin);
return -1;
}
if (!(fout = fopen(argv[2],"wb")))
{
printf("Cannot write on output file %s\n", argv[2]);
fclose(fin);
return -1;
}
fseek(fin, 0, SEEK_END);
fgetpos(fin, &flen);
len = flen;
printf("Input file length : %zd\n", len);
fseek(fin, 0, SEEK_SET);
if (!(ptr = malloc(len)))
{
printf("Canot allocate %zd bytes\n", len);
fclose(fin);
fclose(fout);
return -1;
}
if (fread(ptr, sizeof(char), len, fin) != len)
{
printf("Cannot read file\n");
fclose(fin);
fclose(fout);
free(ptr);
return -1;
}
fclose(fin);
if (fwrite(ptr, sizeof(char), len, fout) != len)
{
printf("Cannot write file\n");
fclose(fout);
free(ptr);
return -1;
}
free(ptr);
fclose(fout);
return 1;
}
だけで実行します。 OUTPUTFILE
- ./pgm入力ファイルを
エラーがありませんr。 2つのファイルの長さは同じです。 2つの指紋が同じではありません。 (ポインタは十分に割り当てられており、出力ファイルに書き込まれます) fwriteではなく、freadのみです。
私はこの問題を理解していません。
私はこのプログラムを見ています(リンゴでこのプログラムを使用するかどうかわかりません)。 変数はintとして定義されています。あなたは64ビットモードでコンパイルしていないように答え
OSX 32ビットまたは64ビットのですか? 32ビットであれば、2GB以上のデータを読み込むことはできませんし、メモリー内に大きなオブジェクトを作成することもできます。 –