【问题标题】:Return values of POSIX functionsPOSIX 函数的返回值
【发布时间】:2017-05-05 11:48:04
【问题描述】:

我尝试编写在两个 POSIX 兼容操作系统(即 QNX 和 Linux 变体)之间共享的 POSIX 兼容代码。

我刚刚发现函数返回值的规范存在细微差异,例如pthread_mutex_trylock()。一个文档说它返回EOK(计算结果为0),另一个文档说它返回纯0,以防成功。

我假设我可以安全地检查返回值 == 0!= 0 并避免使用 QNX EOK 宏。

我的问题:

  1. POSIX 是否明确定义了函数必须在成功和/或错误的情况下返回哪些值?
  2. 严格来说,是一个指定返回EOK(不是0)POSIX 兼容的函数吗?
  3. EOK 是某个标准的一部分吗?

【问题讨论】:

  • 这个问题纯属学术性的。首先,Posix 是关于源代码兼容性的,而不是关于二进制兼容性的。 EOK 不是由 posix 指定的,并且提到的函数需要在成功时返回 0,所以在这里使用常量 0 是安全的。我不知道包含EOK 的标准。
  • @Ctx:嗯,源代码兼容性正是这里的问题。 EOK 似乎打破了这种兼容性(不必要地)。无论如何,既然你的评论回答了我的问题,为什么不把它作为一个实际的答案呢?

标签: c posix return-value standards-compliance


【解决方案1】:
  1. 有 POSIX 手册页,请查阅它们以了解函数的 POSIX 定义。例如:http://www.unix.com/man-page/all/3posix/pthread_mutex_trylock/。一般来说,POSIX 是非常一致的,在所有返回值仅用于表示成功或失败的情况下,0 表示成功。
  2. 如果 EOK 等于 0,则 QNX 实现符合 POSIX。但是,正如您已经说过的,在您自己的代码中使用 0 以确保它可以在所有平台上编译。
  3. 据我所知,它不是独立于平台的标准的一部分。要么你避免使用它,要么如果你认为EOK 更清楚,那么你可以在你的程序中写这个:

.

#ifndef EOK
#define EOK 0
#endif

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    相关资源
    最近更新 更多