2012-02-21 255 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?