任何不是posix标准的东西都可能是额外的系统调用,或者它可能是系统调用层之上的附加库功能.如果您的目标是将可移植代码写入posix,并尽可能使用c库(而不是直接系统调用).
如果你只是好奇,它们的差异很大.为了符合posix标准,您不需要在系统调用方面提供太多支持.它指定了您需要支持的接口,但是您是通过调用内核还是跳转到共享库来实现这一点,这在很大程度上取决于您.
Mac OS X甚至不保证发行版之间系统调用的二进制兼容性,他们认为它们是系统库和操作系统之间的私有接口.大多数人认为是系统调用的实际上是调用内核的动态库中的小存根,如果直接进行系统调用而不是链接到该动态库并调用存根函数,那么代码可能会在OS之间中断版本.
这种灵活性意味着许多操作系统实现的系统调用与支持posix所需的系统调用完全不同,然后处理其库中的差异.例如,Linux的线程实现基于一个名为clone()的系统调用,它们处理大部分簿记以使pthreads接口在其库中工作.
因此,如果你的目标是实现一个标准库,它不会链接任何其他东西并且可以处理多个unix,那么在某些情况下你可能会觉得有些棘手.如果您的目标是编写与各种Unix上的标准库链接的内容,您可以获得一个统一的界面.
任何不是posix标准的东西都可能是额外的系统调用,或者它可能是系统调用层之上的附加库功能.如果您的目标是将可移植代码写入posix,并尽可能使用c库(而不是直接系统调用).
如果你只是好奇,它们的差异很大.为了符合posix标准,您不需要在系统调用方面提供太多支持.它指定了您需要支持的接口,但是您是通过调用内核还是跳转到共享库来实现这一点,这在很大程度上取决于您.
Mac OS X甚至不保证发行版之间系统调用的二进制兼容性,他们认为它们是系统库和操作系统之间的私有接口.大多数人认为是系统调用的实际上是调用内核的动态库中的小存根,如果直接进行系统调用而不是链接到该动态库并调用存根函数,那么代码可能会在OS之间中断版本.
这种灵活性意味着许多操作系统实现的系统调用与支持posix所需的系统调用完全不同,然后处理其库中的差异.例如,Linux的线程实现基于一个名为clone()的系统调用,它们处理大部分簿记以使pthreads接口在其库中工作.
因此,如果你的目标是实现一个标准库,它不会链接任何其他东西并且可以处理多个unix,那么在某些情况下你可能会觉得有些棘手.如果您的目标是编写与各种Unix上的标准库链接的内容,您可以获得一个统一的界面.
我能找到的最好的是Unix-Linux-BSD Cheat-Sheets,用于各种系统调用,可以与Solaris系统调用进行比较.
仅对于Unix,系统调用的数量或多或少增加了四倍,具体取决于"系统调用"的含义.
高级UNIX编程的第一版仅关注大约70个真正的内核系统调用 - 例如,打开,读取和写入; 但不是像fopen,fread和fwrite这样的库调用.
第二版包含大约300个.(总共大约有1,100个标准函数调用,但其中很多都是标准C库的一部分,或者显然不是内核工具.)
今天的UNIX有线程,实时信号,异步I/O和新的进程间通信功能(POSIX IPC),20年前都没有