【问题标题】:How can I get whether an unix-like OS implement POSIX Semaphore?如何获取类 unix 操作系统是否实现 POSIX 信号量?
【发布时间】:2011-12-11 13:03:04
【问题描述】:

如何确定类 unix 操作系统(例如 Mac OS X/Linux 2.6)是否实现 POSIX Semaphore?可以用 sysconf 来获取吗?

#include <unistd.h>
long sysconf(int name);

我只想在 Linux/Mac OS X 中使用 POSIX 信号量 api(sem_init/sem_wait/sem_post)。我看到 Linux 2.6 和 MAC OS X 10.6.6 都实现了 POSIX 信号量。但是,当我编写跨平台应用程序时,如何确定类 unix 的操作系统是否实现了 POSIX 信号量。

【问题讨论】:

  • 我不确定我是否理解您的问题。 sysconf 是运行时测试。大概您希望在编译时进行检查,不是吗?
  • @Mat 对不起,我修改了描述,希望表达清楚。

标签: c posix semaphore


【解决方案1】:

是的,sysconf 应该回答带有标签的查询

 _POSIX_SEMAPHORES

带有支持的版本号。在 POSIX 系统上,您还拥有getconf。例如,在我的 linux 机器上,我得到了

>% getconf  _POSIX_SEMAPHORES
200809

因此,您可以将其集成到构建脚本或类似的东西中。 在 linux 上,您还应该有一个手册页 posixoptions

但请注意始终检查sem_init 的返回。 AFAIR,OS X 很简单地实现了这一点,因为它总是返回-1

【讨论】:

  • 谢谢。在我的 Mac OS X 10.6.6 上,_POSIX_SEMAPHORES 是 undefined
【解决方案2】:

您必须要求您的构建系统进行检查。我可能只是寻找sem_init,如果它在那里,就假设它是一个类似POSIX 的sem_init。在 autoconf 系统的情况下,看起来像

AC_SEARCH_LIBS([sem_init], [rt], ...)

当然,您始终可以对运行发布/等待测试周期的整个程序进行更精细的测试。

【讨论】:

  • 我认为仅仅请求sem_init 是不够的,因为至少有一个系统(OS X?)通过总是返回-1 来实现它:((
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 2017-05-14
  • 2011-09-13
  • 2016-04-18
  • 1970-01-01
  • 2012-12-09
相关资源
最近更新 更多