从<sys stat.h =“”>调用stat会出现“对于已定义的数据类型而言值太大”错误</sys>

时间:2012-12-15 15:40:14

标签: c posix runtime-error system-calls

鉴于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

4 个答案:

答案 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来删除限制。