C标准库和C POSIX库的区别
我被“C标准lib”和“C POSIX lib”弄糊涂了,因为我发现“C POSIX lib”中定义的许多头文件也是“C标准库”的一部分。
所以,我假设“C标准库”是由ANSI C组织定义的一个库,在不同平台(Win32 / Unix-like)上有不同的实现,而“C POSIX库”只是“C标准lib“在类似Unix的操作系统上,对吗?
但是“C POSIX lib”包含了一些未在“C标准库”中指定的头文件,如<sys/types.h>
, <sys/wait.h>
和<pthread.h>
。
以<pthread.h>
为例,我假定它的“C标准库”对应是<threads.h>
,那么如果我想在Linux上编写一个multithreading程序,我应该包含哪个头文件<pthread.h>
或<threads.h>
?
POSIX是标准C库的超集,重要的是要注意它。 如果C和POSIX有冲突,C胜。
套接字,文件描述符,共享内存等都是POSIX的一部分,但不在C库中。
pthread.h
用于POSIX线程和threads.h
是C11的新头,是C库的一部分。 也许pthreads在未来的某个时候会被弃用,但是你可能不能指望C11有广泛的部署。 因此,如果你想要可移植性,你现在应该更喜欢pthreads。 如果可移植性不是问题,并且有C11线程可用,那么您应该使用这些线程。
C POSIX库是POSIX系统的C标准库的规范。 它是与ANSI C标准同时开发的。 一些努力使POSIX与标准C兼容; POSIX包含标准C中引入的function
POSIX 7报价
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap01.html#tag_14_01
1.1与其他正式标准的关系
已经非常谨慎地确保POSIX.1-2008这一卷完全符合以下标准:
ISO C(1999)ISO / IEC 9899:1999,编程语言-C包括ISO / IEC 9899:1999 / Cor.1:2001(E),ISO / IEC 9899:1999 / Cor.2:2004(E),和ISO / IEC 9899:1999 / Cor.3。
引用ISO / IEC 9899:1999标准的部分内容(以下简称ISO C标准)来描述POSIX.1-2008本部分规定的要求。 本卷中包含的一些函数和头文件在ISO C标准中有一个版本; 在这种情况下,将酌情添加CX标记以显示ISO C标准已扩展的位置(请参阅代码)。 这个POSIX.1-2008与ISO C标准之间的任何冲突都是无意的。
我列出了一些主要的API扩展: 我从来没有真正理解:什么是POSIX?