【问题标题】:Is Mac OS X POSIX-incompliant? (timer_settime)Mac OS X POSIX 不兼容吗? (timer_settime)
【发布时间】:2015-02-12 22:53:44
【问题描述】:

我用C++写了一个程序,在Ubuntu下使用timer_settime函数,然后让朋友尝试在Mac OS X下编译。timer_settime的man page说这个函数符合POSIX .1-2001,但在 OS X(据称符合 POSIX)下,g++ 给出了编译错误。网络搜索显示 OS X API 中没有此功能。

这是否意味着 OS X 不完全符合 POSIX,还是我误解了 POSIX 合规性的含义?

编辑:我查看了POSIX draft,并在第 2063 页的系统接口字母列表中找到了这个函数,就在标准 C 函数(如 printf)旁边,因此在我看来,@ 987654326@ 是标准的某种扩展。

【问题讨论】:

  • 在我看来timer_settime()可选 POSIX 扩展的一部分。操作系统完全有可能与 POSIX 兼容但不实现该扩展。
  • 这里引用了 R. Love 在“Linux 系统编程”中关于timer_settime 和相关功能的部分:“POSIX 时钟系列的定时器接口无疑是最先进的,但也是最新的 ( ergo 是最不便携的)和最复杂的使用。如果简单或便携是主要动机,setitimer() 很可能是更好的选择。据我所知,没有任何关于扩展的说法,但界面被认为是“新的”。
  • 2 @Ken 顺便说一句,我有点奇怪,旨在使程序可移植到所有兼容系统的标准可以定义可选扩展。您能否提供一个链接,让我可以阅读有关 POSIX 扩展的信息?
  • 我没有任何确定的东西。这是我发现的一个讨论:eetimes.com/document.asp?doc_id=1200444
  • 您遇到什么错误? POSIX 不谈论 C++。请使用 C 编译器进行编译,而不是 C++ 编译器。

标签: macos unix posix


【解决方案1】:

事实证明,像 timer_settime 这样的高级计时器功能确实是 POSIX 实时扩展的一部分,正如 Ken Thomases 所建议的那样。引用此函数的文档更改历史记录:

第 6 期

timer_getoverrun()、timer_gettime() 和 timer_settime() 函数被标记为 Timers 选项的一部分。

第 7 期

timer_getoverrun()、timer_gettime() 和 timer_settime() 函数已从 Timers 选项移至 Base。

最新的 POSIX 标准,POSIX.1-2008,第 7 期,于 2013 年最近发布。我朋友的计算机运行 OS X 10.9,它也在 2013 年底发布,因此我认为它不符合最新标准。但是,维基百科says 指出,2014 年底发布的最新 OS X v10.10 “Yosemite”完全符合 POSIX。

然而,毕竟,当某些功能被标准默默地标记为“扩展”并且手册页没有提及这一重要事实时,我仍然不明白应该如何编写可移植代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2012-03-16
    相关资源
    最近更新 更多