2012-02-21 4 views
51

Sono un po 'confuso da "C standard lib" e "C POSIX lib", perché ho scoperto che, molti file di intestazione definiti in "C POSIX lib" fanno anche parte di "C lib standard".Differenza tra libreria standard C e libreria POSIX

Quindi, presumo che, "C lib standard" è una lib definita dall'organizzazione ANSI C, e ci sono diverse implementazioni su piattaforme diverse (Win32/Unix-like), e "C POSIX lib" è solo un'implementazione per "C standard lib" su sistemi operativi Unix-like, giusto?

Ma "C POSIX lib" contiene alcune intestazioni non specificate in "C lib standard", come ad esempio <sys/types.h>, <sys/wait.h> e <pthread.h>.

Prendere <pthread.h> come esempio, presumo il suo "standard C lib" controparte è <threads.h>, quindi se voglio scrivere un programma multi-threaded su Linux, che file di intestazione devo includere, <pthread.h> o <threads.h>?

+5

ANSI C è obsoleto dal 1990, quando C è diventato uno standard internazionale. Da allora, C viene gestito da un [gruppo di lavoro ISO] (http://www.open-std.org/jtc1/sc22/wg14/). – Lundin

+4

@Lundin Assurdamente assurdo. ANSI C non è altro che obsoleto. Infatti C11 è stato adottato dall'INCITS come standard ANSI noto come [INCITS/ISO/IEC 9899-2012] (http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012) qual è il nuovo standard ANSI C. – Wiz

+0

@ Wiz È uno standard internazionale e questo è un sito internazionale. Con questo in mente, non ha alcun senso parlare di ANSI C dal 1990. È lo stesso che se mi riferissi a C su questo sito come "SS C", dato che sono svedese e svedese si chiama SS/ISO/IEC 9899. – Lundin

risposta

36

POSIX è un superset della libreria C standard, ed è importante notare che esso rimanda ad esso. Se C e POSIX sono mai in conflitto, C vince.

Socket, descrittori di file, memoria condivisa, ecc. Fanno tutti parte di POSIX, ma non esistono nella libreria C.

pthread.h viene utilizzato per i thread POSIX e threads.h è una nuova intestazione per C11 e fa parte della libreria C. Forse i pthreads saranno deprecati in futuro in favore di quelli C, tuttavia probabilmente non si può contare su C11 per avere una distribuzione ancora diffusa. Quindi se vuoi la portabilità, per ora preferisci i pthread. Se la portabilità non è un problema e hai a disposizione thread C11, dovresti probabilmente usarli.

+0

Ad esempio, signal.h è entrambi menzionati in http://en.wikipedia.org/wiki/C_standard_library e in http://en.wikipedia.org/wiki/C_POSIX_library. Ma ancora non capisco. Signal.h è un'intestazione della libreria C standard o è disponibile solo nei sistemi POSIX? –

+1

@KorayTugay il modo migliore per capire è IMO per andare alla [pagina web POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799) e cercare [signal.h] (http: // pubs. opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html). Noterà che l'intestazione esiste nella libreria standard C ma che POSIX si estende ad essa. Le estensioni sono contrassegnate con 'CX'. Dice che devi aggiungere un define, ma in genere le estensioni sono abilitate dai flag del compilatore di default. Un'altra opzione è leggere lo [standard C] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf). –

+0

Non penso che i pthread saranno deprecati a favore dei thread C11, specialmente dal momento che i thread C11 sono (ad eccezione di un dettaglio non importante) un sottoinsieme appropriato di pthreads. – fuz

9

La libreria C POSIX è una specifica di una libreria standard C per sistemi POSIX. È stato sviluppato contemporaneamente allo standard ANSI C. È stato fatto qualche sforzo per rendere POSIX compatibile con lo standard C; POSIX include funzioni aggiuntive rispetto a quelle introdotte nello standard C.

3

POSIX 7 citazione

http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap01.html#tag_14_01

1,1 relazione con altre norme formali

Grande cura è stata presa per garantire che questo volume di POSIX.1-2008 è pienamente in linea con i seguenti standard:

ISO C (1999) ISO/IEC 9899: 1999, Programma lingue: C, incluso ISO/IEC 9899: 1999/Cor.1: 2001 (E), ISO/IEC 9899: 1999/Cor.2: 2004 (E) e ISO/IEC 9899: 1999/Cor.3.

Le parti dello standard ISO/IEC 9899: 1999 (di seguito denominato lo standard ISO C) fanno riferimento ai requisiti richiesti anche dal presente volume di POSIX.1-2008. Alcune funzioni e intestazioni incluse in questo volume di POSIX.1-2008 hanno una versione nello standard ISO C; in questo caso i contrassegni CX vengono aggiunti come appropriato per mostrare dove è stato esteso lo standard ISO C (vedere Codici). Qualsiasi conflitto tra questo volume di POSIX.1-2008 e lo standard ISO C non è intenzionale.

ho elencato alcune grandi estensioni API a: I never really understood: what is POSIX?