信号量:为什么在 sem.h 中定义了 sembuf 而没有定义 semun?

Semaphore: why is sembuf defined in sem.h but semun is not?

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

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

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

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

参见 semctl() 的 SunOS 手册页:

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

源自 AT&T 手册页。