gpt4 book ai didi

c - 当长度 > 2G 时,Fread on Lion 无法读取

转载 作者:行者123 更新时间:2023-12-02 09:39:16 25 4
gpt4 key购买 nike

由于 Macosx Lion fread 无法读取长度 > 2G(int 大小,2'147'483'648 字节)的文件。它在 Macosx Snow Leopard 上运行了多年。

我编写了一个程序来测试它:

#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;
}

只需运行:

  • ./pgm 输入文件输出文件
  • openssl sha 输入文件
  • openssl sha 输出文件

没有错误。2个文件的长度相同。两个指纹不一样。(指针已分配好并写入输出文件中)它仅使用 fread,而不使用 fwrite。

我不明白这个问题。

我刚刚看到这个程序(我不知道苹果是否在 Lion 上使用这个程序)并且r 变量被定义为 int。 http://www.opensource.apple.com/source/Libc/Libc-186/stdio.subproj/fread.c

谢谢各位的解答

最佳答案

听起来您没有在 64 位模式下编译。查找您正在使用的任何编译器的命令行参数或选项。为了确保您在正确的模式下进行编译,printf("%d\n", sizeof(int)); 并查看它是否显示您所期望的内容。

关于c - 当长度 > 2G 时,Fread on Lion 无法读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7928784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com