Linux上POSIX函数“stat”的定义在哪里?

时间:2012-06-09 08:49:53

标签: c linux posix system-calls

在Windows上,stat和几乎所有其他C / POSIX函数Windows供应都是在msvcrt.dll中定义的,这是C运行时库。

在Linux上,我知道很多POSIX C函数都是系统调用。我也知道在链接程序时,你不能有未定义的引用。我搜索了so/lib中的所有/usr/lib个文件,搜索了符号stat或“已修复/带前缀”的格式,但未找到任何内容。这是我使用的命令:

objdump -T /lib/*.so* /usr/lib/*.so* | grep "stat"

它没有出现我正在寻找的stat

所以我的问题变成:它在哪里,以及定义的任何其他“系统调用”?

4 个答案:

答案 0 :(得分:3)

在我的Linux机器上,我可以在stat中找到__stat(弱)符号和/usr/lib/libc.a(非弱)

答案 1 :(得分:2)

如果不使用libc,您可能会linux kernel system calls(但这可能是一种不好的做法)。 Linux Assembly Howto解释了(在其第5章和第6章中)如何做到这一点(至少在x86 Linux 32位上)。

但我认为这是一个坏主意。通过libc是很好的做法,甚至可能更快(因为例如VDSO),并且更便携。

答案 2 :(得分:1)

首先stat含糊不清;有一个stat系统调用,并且有一个函数stat可以从调用系统调用的用户空间调用。最后一个函数(在我的系统上至少)在/usr/include/sys/stat.h中定义(这是正确的,它在头文件中)。它实际上有几个定义(所有一个内容调用不同的函数,例如__fxstat),其中一个是根据编译器和系统选择的。

无论如何,stat(和其他系统调用)只是调用内核的包装器(通常有很多编排)。这就是为什么我最初对你的意思感到困惑。我希望,尽管我的第一次评论毫无帮助,但我能提供帮助。

答案 3 :(得分:1)

您可以使用syscall(2)

进行调用
#include <sys/syscall.h>
...
syscall(SYS_stat, path, buf);

另请参阅Linux系统调用参考:http://syscalls.kernelgrok.com/