stat64系统调用:有多少参数



在OSX 10.9(64位操作系统)上,我运行命令

sudo dtruss pwd

以获取pwd命令执行的系统调用的列表。我看到系统调用stat64像这样执行了好几次:

stat64("/usr/lib/system/libsystem_kernel.dylib", 0x7FFF5F7B4E28, 0x7FFF5F7B5CC0)       = 0 0

现在,在在线POSIX标准文档和Apple文档中,我看到stat64有两个参数。为什么在我的情况下需要3个参数?

C库调用stat64只是围绕系统调用的包装器(和此)。它们不必在参数数量上匹配,尽管以linux为例,它们似乎大多匹配(我找不到类似的BSD参考),尽管一个显著的例外是fork,它被实现为对克隆系统调用的调用。

更新

我找不到OSX的等价物,但如果我们看看Linux的syscalls手册页,就会发现:

随着时间的推移,一些系统调用的接口发生了更改必需的这种变化的一个原因是需要增加传递给系统调用的结构或标量值的大小。由于这些变化,现在有各种相关的执行的系统调用(例如truncate(2)和truncate64(2)类似的任务,但在细节上有所不同,例如它们的大小论点。(如前所述,应用程序通常不知道这个:glibc包装器函数做了一些工作,以确保调用正确的系统调用,并保留ABI兼容性对于旧二进制文件。)存在于多个版本如下:

最新更新