2012-02-21 261 views
51

由于我发现“C POSIX库”中定义的许多头文件也是“C标准库”和“C标准库”的一部分, “C标准库”。因此,我假设“C标准库”是由ANSI C组织定义的一个库,并且在不同平台(Win32/Unix-like)上有不同的实现,而“C POSIX库”只是一个实现对于类Unix操作系统上的“C标准库”,对吧?C标准库和C POSIX库之间的区别

但是“C POSIX lib”包含一些未在“C标准库”中指定的头文件,例如<sys/types.h><sys/wait.h><pthread.h>

<pthread.h>采取,例如,我相信其“C标准库”对应的是<threads.h>,那么如果我想要写Linux上的多线程程序,该头文件我应该包括,<pthread.h><threads.h>

+5

ANSI C已经过时。此后,C由[ISO工作组]维护(http://www.open-std.org/jtc1/sc22/wg14/)。 – Lundin 2012-02-21 12:12:38

+4

@Lundin完全废话。 ANSI C只是过时而已。事实上C11被INCITS采纳为ANSI标准,称为[INCITS/ISO/IEC 9899-2012](http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012)这是新的ANSI C标准。 – Wiz 2013-12-14 09:31:55

+0

@Wiz这是一个国际标准,这是一个国际网站。考虑到这一点,自1990年以来就谈论ANSI C没有任何意义。这与我在本网站上将C引用为“SS C”一样,因为我来自瑞典和瑞典的标准被称为SS/ISO/IEC 9899. – Lundin 2013-12-16 07:38:12

回答

36

POSIX是标准C库的超集,需要注意的是它要遵循它。如果C和POSIX有冲突,C胜。

套接字,文件描述符,共享内存等都是POSIX的一部分,但不存在于C库中。

pthread.h用于POSIX线程,threads.h是C11的新头,是C库的一部分。也许pthreads在未来某个时候会被弃用,而不是C11,但是你可能不能指望C11有广泛的部署。因此,如果你想要可移植性,你现在应该更喜欢pthreads。如果可移植性不是问题,并且您有C11线程可用,那么您应该使用这些线程。

+0

例如,在http://en.wikipedia.org/wiki/C_standard_library和http://en.wikipedia.org/wiki/C_POSIX_library中都提到了signal.h。但我仍然不明白。 signal.h是标准C库的头文件,还是仅在POSIX系统中可用? – 2015-06-04 19:34:32

+1

@KorayTugay找出它的最好方法是IMO转到[POSIX网页](http://pubs.opengroup.org/onlinepubs/9699919799)并搜索[signal.h](http:// pubs。 opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html)。它会注意到标题存在于C标准库中,但POSIX扩展到它。扩展名用“CX”标记。它说你必须添加一个定义,但通常这些扩展是由默认的编译器标志启用的。另一种选择是阅读[C标准](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)。 – 2015-06-05 08:48:19

+0

我不认为pthread会因C11线程而被弃用,特别是因为C11线程(除了一个不重要的细节)是pthread的一个合适的子集。 – fuz 2016-10-04 17:17:35

9

C POSIX库是POSIX系统的C标准库的规范。它是与ANSI C标准同时开发的。一些努力使POSIX与标准C兼容; POSIX包括标准C中引入的附加功能。

3

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

我在列出了一些主要的API扩展:自1990年以来,当C成为国际标准I never really understood: what is POSIX?