我对“C标准库”和“C POSIX库”感到有些困惑,因为我发现“C POSIX lib”中定义的许多头文件也是“C标准库”的一部分。
因此,我认为,“C标准库”是由ANSI C组织定义的库,并且在不同平台(Win32 / Unix-like)上有不同的实现,而“C POSIX lib”只是一个实现类Unix操作系统上的“C标准库”,对吧?
但是“C POSIX lib”包含一些未在“C标准库”中指定的标题,例如<sys/types.h>
,<sys/wait.h>
和<pthread.h>
。
以<pthread.h>
为例,我认为它的“C标准库”对应物是<threads.h>
,那么如果我想在Linux上编写一个多线程程序,我应该包含哪个头文件, <pthread.h>
或<threads.h>
?
答案 0 :(得分:43)
POSIX是标准C库的超集,重要的是要注意它遵循它。如果C和POSIX发生冲突,C就会胜出。
套接字,文件描述符,共享内存等都是POSIX的一部分,但在C库中不存在。
pthread.h
用于POSIX线程,threads.h
是C11的新标头,是C库的一部分。也许pthreads将来会在某个时候被弃用,而不是C语言,但是你可能不能指望C11进行广泛的部署。因此,如果你想要可移植性,你现在应该更喜欢pthreads。如果不考虑可移植性,并且您有可用的C11线程,则应该使用它们。
答案 1 :(得分:10)
C POSIX库是POSIX系统的C标准库的规范。它与ANSI C标准同时开发。为了使POSIX与标准C兼容,我们做了一些努力; POSIX包含标准C中引入的附加功能。
答案 2 :(得分:4)
POSIX 7引用
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap01.html#tag_14_01
列出了一些主要的API扩展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要求的要求。本卷POSIX.1-2008中包含的一些函数和头文件具有ISO C标准的版本;在这种情况下,会根据需要添加CX标记,以显示ISO C标准的扩展位置(请参阅代码)。此量的POSIX.1-2008与ISO C标准之间的任何冲突都是无意的。
答案 3 :(得分:0)
我认为ANSI C仍然存在:ANSI C由ISO C,Cxx继承和扩展。 POSIX绝对遵守ANSI C。”
我们可以在Windows,Unix-like,嵌入式设备上轻松编写ANSI C;但是Cxx或POSIX可能有问题。