我正在运行内核级别为3.0.76的32位SUSE Linux。

我可以在代码中看到stat()调用转换为strace输出中的stat64(),而无需指定任何CPP选项,例如_LARGEFILE64_SOURCE或_FILE_OFFSET_BITS = 64。

#include<stdio.h>
#include<sys/stat.h>

int main ( int argc, char * argv[] )
{
    char * path = "nofile";
    struct stat b;
    if (stat(path, &b) != 0) {
    }
}

我用gcc编译了这个文件,没有编译器选项/标志。

在运行程序时,相关的strace输出为:
    munmap(0xb770a000, 200704)              = 0
    stat64("nofile", 0xbfb17834)            = -1 ENOENT (No such file or directory)
    exit_group(-1)

谁能告诉我stat()如何转换为stat64()?

提前致谢!

最佳答案

答案似乎可以在stat手册页中找到



基本上,glibc始终调用stat64。

如果添加printf("%zu\n", sizeof b);struct stat的大小可能会有所不同,具体取决于您是否使用_FILE_OFFSET_BITS = 64,并且glibc在内核和您的代码之间转换struct stat

关于c - 没有任何cpp选项的系统调用stat()转换为stat64(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26337740/

10-12 19:02