【问题标题】:Semaphore: why is sembuf defined in sem.h but semun is not?信号量:为什么在 sem.h 中定义了 sembuf 而 semun 没有?
【发布时间】:2015-11-30 18:09:34
【问题描述】:

我在this tutorial之后一直在尝试linux IPC,并提出了以下问题。

在示例代码semdemo.c中,semun是程序员明确定义的,而sembuf是在我的机器/usr/include/x86_64-linux-gnu/sys/sem.h的头文件中预定义的。为什么不把semun的定义也移到头文件中呢?

【问题讨论】:

    标签: kernel ipc semaphore


    【解决方案1】:

    如果这样做,这将破坏现有程序,因为 C 语言不允许双重定义类型。

    缺少的类型定义是 AT&T 的遗产,无法更改。

    请参阅 semctl() 的 SunOS 手册页:

    http://schillix.sourceforge.net/man/man2/semctl.2.html

    源自 AT&T 手册页。

    【讨论】:

    • 我明白了。网上有没有相关的背景故事/参考资料?
    • 感谢您的更新。顺便说一句,我刚刚从 Richard Stevens 的 APUE 3rd 中发现 semun 是在 FreeBSD 8.0(第 568 页)中定义的。
    • 由于这个 FreeBSD 错误,我们需要对也喜欢在 FreeBSD 上运行的便携式软件进行特殊的 autoconf 测试。
    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2010-10-29
    • 2021-12-28
    • 2017-03-05
    相关资源
    最近更新 更多