我正在运行内核级别为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/