鉴于tmp.c:
#include <sys/stat.h>
#include <errno.h>
#include <stdio.h>
int main(int argc, const char *argv[])
{
struct stat st;
if (stat(argv[1], &st) != 0)
{
perror("Error calling stat");
}
return 0;
}
当我在大文件(~2.5 Gb)上运行程序时,我得到Error calling stat: Value too large for defined data type
。
答案 0 :(得分:8)
需要#define _FILE_OFFSET_BITS 64
:要么在你之前添加它
#include <sys/stat.h>
或以您的平台特定方式定义它,例如,对于gcc,请参阅-D选项;对于Visual Studio,转到项目属性 - &gt;配置属性 - &gt; C / C ++ - &gt;预处理器 - &gt;预处理器定义
答案 1 :(得分:2)
如果其他人遇到此问题并且_FILE_OFFSET_BITS 64
之前的#include "sys/stat.h"
尚未解决,请将其移至所有其他包含的前面。我没有找到哪个标题也依赖于此但它解决了问题。
答案 2 :(得分:1)
请查看此link。它为您提供了处理此类问题的方法。
这通常通过定义-D_FILE_OFFSET_BITS = 64或其他一些来完成。它取决于系统。完成后,一旦切换到这种新模式,大多数程序都会支持大文件。
答案 3 :(得分:0)
您可以通过在程序中包含头文件 config.h 来消除此限制。 这不是必须包含整个文件,但你也可以放一个宏#define _FILE_OFFSET_BITS 64来删除限制。