C标准库与C POSIX库的区别

时间:2012-02-21 11:32:58

标签: c posix standard-library

我对“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>

4 个答案:

答案 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

  

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标准之间的任何冲突都是无意的。

我在I never really understood: what is POSIX?

列出了一些主要的API扩展

答案 3 :(得分:0)

我认为ANSI C仍然存在:ANSI C由ISO C,Cxx继承和扩展。 POSIX绝对遵守ANSI C。”

我们可以在Windows,Unix-like,嵌入式设备上轻松编写ANSI C;但是Cxx或POSIX可能有问题。