【问题标题】:Contradictory documentation on sysctlbyname return value关于 sysctlbyname 返回值的矛盾文档
【发布时间】:2021-09-30 09:04:21
【问题描述】:

手册页 sysctl(3) 声明 sysctlbyname 和其他提到的函数在成功的情况下返回 0 或 -1 并设置 errno。但是sysctlbynameApple Documentation (用于目标C)对返回值表示以下内容:

返回值

0 表示成功,或表示出现问题的错误代码。可能的错误代码包括 EFAULT、EINVAL、ENOMEM、ENOTDIR、EISDIR、ENOENT 和 EPERM。

那么到底是0/-1 & errno 还是直接返回的错误码呢?还是它在目标 C 中返回的东西与手册页中提到的 C 函数不同?但即使是 Apple 文档中提供的示例也只检查返回值 -1,然后使用 errno 记录错误。在我看来,Apple 的文档是错误的或至少不清楚。

【问题讨论】:

  • 考虑到 Apple 文档中的示例也使用 -1 作为错误返回,我认为它的措辞很糟糕。它在出错时返回-1,并且“可能的错误代码”像往常一样存储在errno中。

标签: c macos


【解决方案1】:

正如 Apple 对 here 的回答,sysctlbyname 的 KPI 版本的文档令人困惑。它的行为与手册页中描述的用户空间版本一样。成功时返回 0,如果发生错误则返回 -1,并设置 errno

【讨论】:

    猜你喜欢
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多