【问题标题】:stat64 system call: how many parameters?stat64 系统调用:有多少参数?
【发布时间】:2014-01-02 19:33:42
【问题描述】:

在 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 需要 2 个参数。 为什么在我的情况下需要 3 个参数?

【问题讨论】:

    标签: posix stat


    【解决方案1】:

    C 库调用 stat64 只是 system call 周围的 wrapper(and this)。它们不必匹配参数的数量,尽管以 linux 为例,它们似乎大部分都匹配(我找不到 BSD 的类似参考),尽管值得注意的例外是fork,它被实现为对克隆系统调用的调用。

    更新

    我找不到 OSX 的等价物,但如果我们查看 syscalls man page for Linux 会说:

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

    【讨论】:

    • 这绝对是一个好点,但仍然有一些东西让我无法理解。根据“man dtruss”,dtruss 命令显示系统调用的详细信息,因此 stat64 系统调用似乎需要 3 个参数;但根据“man 2 stat”,stat 和 stat64 系统调用(man 的第 2 节是关于系统调用的)只需要 2 个参数。哪一个在说谎?或者更确切地说:我在这里错过了什么?此外,man 的第 3 节(关于 C 库函数)不包含关于 stat/stat64 的页面(但这可能只是手册本身的一个缺点)。
    • @UndefinedBehavior 更新了我的答案,我没有收到您的评论通知,这很奇怪。
    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2014-10-23
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多