C 为什么信号在Linux中依赖于平台?

C 为什么信号在Linux中依赖于平台?,c,linux,linux-kernel,signals,posix,C,Linux,Linux Kernel,Signals,Posix,手册页说明: 下表给出了每个信号的数值。作为 如表中所示,许多信号上有不同的数值 不同的体系结构 的确如此。在Linux内核源代码中,我们可以确保f.e.-这里有一组针对不同体系结构的signal.h文件 所以,如果它是操作系统级的,并且与硬件没有明确的关系,为什么会有这样的平台依赖性呢?为什么Linux不能在所有受支持的平台上平等地处理它 注意,这没有帮助。许多不应该依赖于平台的事情也是如此:ioctl号码、系统调用号码、fcntl号码、stat和sysv ipc结构、mmap标志等。原因是

手册页说明:

下表给出了每个信号的数值。作为 如表中所示,许多信号上有不同的数值 不同的体系结构

的确如此。在Linux内核源代码中,我们可以确保f.e.-这里有一组针对不同体系结构的signal.h文件

所以,如果它是操作系统级的,并且与硬件没有明确的关系,为什么会有这样的平台依赖性呢?为什么Linux不能在所有受支持的平台上平等地处理它


注意,这没有帮助。

许多不应该依赖于平台的事情也是如此:
ioctl
号码、系统调用号码、
fcntl
号码、
stat
和sysv ipc结构、
mmap
标志等。原因是历史错误

在早期,Linux在主要的现有专有unix上对每个平台的定义进行建模。对于一些人来说,有人试图从专有的unix上运行二进制文件,在一些罕见的情况下,有一段时间,这是可行的。对于其他人来说,这只是一个巨大的努力浪费和技术债务。即使在它确实起作用的地方,这些旧系统也早已消失


现代Linux在某种程度上解决了这一问题,对所有新的系统调用使用统一的编号,对新类型使用统一的asm generic定义,等等。但所有遗留的包袱仍然存在。

如链接文章中所述,这是历史性的——最初linux试图通过二进制方式与每个体系结构上占主导地位的UNIX风格兼容,一旦设置了信号号,就不能在不破坏二进制兼容性的情况下更改它们。@ChrisDodd唯一的原因是遗留问题?“最初linux是在尝试…”-但现在linux正在尝试吗?@z0lupka linux旨在说明为什么它没有帮助?说得好。我希望有办法纠正这些错误——我们现在必须处理它们。