Kernel 信号量:为什么sembuf是在sem.h中定义的,而semun不是?

Kernel 信号量:为什么sembuf是在sem.h中定义的,而semun不是?,kernel,ipc,semaphore,Kernel,Ipc,Semaphore,我一直在尝试LinuxIPC跟踪,并提出了以下问题 在示例代码中,semun是由程序员明确定义的,而sembuf是在头文件中预定义的,在我的机器上/usr/include/x86\u 64-linux-gnu/sys/sem.h。为什么我们不把semun的定义也移到头文件中呢?如果这样做,就会破坏现有的程序,因为C语言不允许双重定义类型 缺少的类型定义是来自AT&T的传统,无法更改 有关semctl(),请参阅SunOS手册页: 这是从AT&T手册页衍生出来的。我明白了。网上有没有相关的背景故

我一直在尝试LinuxIPC跟踪,并提出了以下问题


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

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

缺少的类型定义是来自AT&T的传统,无法更改

有关
semctl()
,请参阅SunOS手册页:


这是从AT&T手册页衍生出来的。

我明白了。网上有没有相关的背景故事/参考资料?谢谢你的更新。顺便说一句,我刚刚从Richard Stevens的第3期APUE中发现,
semun
是在FreeBSD 8.0(第568页)中定义的。由于这个FreeBSD错误,我们需要对喜欢在FreeBSD上运行的便携式软件进行一个特殊的autoconf测试。