在OSX 10.9(64位操作系统)上运行命令
sudo dtruss pwd
获取pwd命令执行的系统调用列表。 我看到系统调用stat64执行了几次,如下所示:
stat64("/usr/lib/system/libsystem_kernel.dylib\0", 0x7FFF5F7B4E28, 0x7FFF5F7B5CC0) = 0 0
现在,在在线POSIX标准文档和Apple documentation中,我看到stat64有两个参数。 为什么我的情况需要3个参数?
答案 0 :(得分:1)
C 库调用stat64
只是wrapper周围的and this( system call )。它们不必匹配参数的数量,尽管在linux的情况下,例如它们似乎大多数情况下(我找不到类似的BSD 参考),虽然一个值得注意的例外是fork,它实现为对克隆系统调用的调用。
更新
我找不到OSX的等价物,但如果我们看一下syscalls man page for Linux就说:
随着时间的推移,对某些系统调用的接口进行了更改 必要。这种变化的一个原因是需要增加 传递给系统调用的结构或标量值的大小。 由于这些变化,现在有各种相关的群体 执行的系统调用(例如,truncate(2)和truncate64(2)) 类似的任务,但在细节上有所不同,例如他们的大小 参数。 (如前所述,应用程序通常不知道 这个:glibc包装函数做了一些工作来确保 调用正确的系统调用,并保留ABI兼容性 对于旧的二进制文件。)以多个存在的系统调用的示例 版本如下: