Unix/Linux系统调用是POSIX库函数的一部分吗?

Unix/Linux系统调用是POSIX库函数的一部分吗?,linux,unix,posix,system-calls,Linux,Unix,Posix,System Calls,Unix/Linux系统调用全部还是主要在POSIX中 许多Linux/Unix编程书籍都说POSIX库函数可能是操作系统调用的包装器,也可能不是。例如,以及 POSIX的一部分(称为单一UNIX规范)定义了UNIX。因此,我认为POSIX定义了Unix(和Linux)的系统调用 那么Unix/Linux系统调用是POSIX库函数的一部分吗 谢谢。中列出了Linux系统调用。大多数是POSIX,但有些是特定于Linux的(例如,等等)。POSIX是一个规范,并不“知道”(在POSIX视图中,这是

Unix/Linux系统调用全部还是主要在POSIX中

许多Linux/Unix编程书籍都说POSIX库函数可能是操作系统调用的包装器,也可能不是。例如,以及

POSIX的一部分(称为单一UNIX规范)定义了UNIX。因此,我认为POSIX定义了Unix(和Linux)的系统调用

那么Unix/Linux系统调用是POSIX库函数的一部分吗


谢谢。

中列出了Linux系统调用。大多数是POSIX,但有些是特定于Linux的(例如,等等)。POSIX是一个规范,并不“知道”(在POSIX视图中,这是一个实现细节)

有些函数在POSIX中是标准化的,但在Linux库代码中实现,例如(参见POSIX)在上面构建…

克隆(2)和inotify(7):克隆是系统调用,inotify是一组调用,一个API

它们没有列为POSIX,也不是POSIX规范的一部分。对于UNIX/Linux上的许多版本来说都是如此

Linux通常不被认为是POSIX,有一些方法可以编写代码并使用POSIXLY_CORRECT环境变量(通常)获得所需的内容,以实现预期的行为方式。Solaris也有类似的问题,可以通过使用PATH变量来处理,例如,使用来自/usr/xpg4/bin而不是/usr/bin的一些命令

另一方面,read(2)有POSIX规范,任何声称符合POSIX的系统都应该支持定义的POSIX规范

所以你的问题的答案可能是:是和否


基本上,您在第2节手册中看到的大多数系统调用都是POSIX,但不能保证情况会是这样。如果按照定义使用POSIX调用,则很可能具有良好的可移植性。

POSIX定义的调用中不属于Linux或其他Unix系统的相对较少。它们往往是尚未实现的较新的函数调用。例如,各种
*at()
函数可能还没有在任何地方实现,因此其可移植性不如 或者


有许多属于Linux和Unix的调用不是POSIX的一部分。例如,
mount(2)
umount(2)
都不是POSIX强制要求的,但它们自古以来就是Unix和Linux的一部分。

严格地说,你的说法因此我认为POSIX定义Unix(和Linux)的系统调用有点不正确。系统调用本身不是POSIX的一部分。本标准定义了一个编程接口,即要求按照规定实现的功能,以使系统符合要求,但没有说明它们是否需要作为系统调用实现

尽管一些POSIX定义的函数毫无疑问始终作为标准库函数实现,如
fopen
fprintf
,但其他一些函数通常作为系统调用实现,但没有任何命令要求它,以及它们是否可能从一个版本更改为另一个版本。这实际上是由Unix实现设计者来决定的

在任何情况下,只有典型的Unix或Linux内核作为系统调用提供的部分与POSIX xsh C语言接口匹配