Kernel 信号量:为什么sembuf是在sem.h中定义的,而semun不是?
我一直在尝试LinuxIPC跟踪,并提出了以下问题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手册页衍生出来的。我明白了。网上有没有相关的背景故
在示例代码中,
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测试。