web-dev-qa-db-fra.com

Différence entre la bibliothèque standard C et la bibliothèque C POSIX

Je suis un peu confus par "C standard lib" et "C POSIX lib", car j'ai trouvé que de nombreux fichiers d'en-tête définis dans "C POSIX lib" font également partie de "C standard lib".

Donc, je suppose que, "C standard lib" est une bibliothèque définie par l'organisation ANSI C, et il existe différentes implémentations sur différentes plates-formes (Win32/Unix-like), et "C POSIX lib" n'est qu'une implémentation pour "C standard lib "sur les systèmes d'exploitation de type Unix, non?

Mais "C POSIX lib" contient des en-têtes non spécifiés dans "C standard lib", tels que <sys/types.h>, <sys/wait.h>, et <pthread.h>.

Prenez <pthread.h> à titre d'exemple, je suppose que son homologue "C standard lib" est <threads.h>, alors si je veux écrire un programme multi-thread sur Linux, quel fichier d'en-tête dois-je inclure, <pthread.h> ou <threads.h>?

63
Alcott

POSIX est un surensemble de la bibliothèque C standard, et il est important de noter qu'il s'en remet à elle. Si C et POSIX sont en conflit, C gagne.

Les sockets, les descripteurs de fichiers, la mémoire partagée, etc. font tous partie de POSIX, mais n'existent pas dans la bibliothèque C.

pthread.h est utilisé pour les threads POSIX et threads.h est un nouvel en-tête pour C11 et fait partie de la bibliothèque C. Peut-être que les pthreads seront dépréciés dans le futur en faveur des C, mais vous ne pouvez probablement pas compter sur C11 pour avoir un déploiement étendu pour le moment. Par conséquent, si vous voulez la portabilité, vous devriez préférer pthreads pour l'instant. Si la portabilité n'est pas un problème et que vous disposez de threads C11, vous devriez probablement les utiliser.

43
Per Johansson

La bibliothèque C POSIX est une spécification d'une bibliothèque standard C pour les systèmes POSIX. Il a été développé en même temps que la norme ANSI C. Un effort a été fait pour rendre POSIX compatible avec la norme C; POSIX inclut des fonctions supplémentaires à celles introduites dans la norme C.

10
L.ppt

Devis POSIX 7

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

1.1 Relation avec d'autres normes formelles

Un grand soin a été apporté à ce que ce volume de POSIX.1-2008 soit parfaitement aligné sur les normes suivantes:

ISO C (1999) ISO/IEC 9899: 1999, Langages de programmation - C, dont ISO/IEC 9899: 1999/Cor.1: 2001 (E), ISO/IEC 9899: 1999/Cor.2: 2004 (E), et ISO/IEC 9899: 1999/Cor.3.

Des parties de la norme ISO/IEC 9899: 1999 (ci-après dénommée la norme ISO C) sont référencées pour décrire les exigences également imposées par ce volume de POSIX.1-2008. Certaines fonctions et en-têtes inclus dans ce volume de POSIX.1-2008 ont une version dans la norme ISO C; dans ce cas, les marquages ​​CX sont ajoutés selon le cas pour montrer où la norme ISO C a été étendue (voir Codes). Tout conflit entre ce volume de POSIX.1-2008 et la norme ISO C n'est pas intentionnel.

J'ai répertorié quelques extensions API majeures sur: je n'ai jamais vraiment compris: qu'est-ce que POSIX?

ANSI C est toujours vivant, je pense: ANSI C est hérité et étendu par ISO C, Cxx. POSIX obéit absolument à ANSI C. "

Nous pouvons écrire ANSI C sur Windows, Unix-Like, un périphérique intégré facilement; mais Cxx ou POSIX peuvent avoir un problème.

0