Разница между стандартной библиотекой C и библиотекой C POSIX

Я немного смущен «C стандартным lib» и «C POSIX lib», потому что обнаружил, что многие заголовочные файлы, определенные в «C POSIX lib», также являются частью «C стандартной библиотеки».

Итак, я предполагаю, что «C standard lib» представляет собой lib, определенную организацией ANSI C, и существуют разные реализации на разных платформах (Win32 / Unix-like), а «C POSIX lib» – это просто реализация для стандарта C lib “на Unix-подобных операционных системах, не так ли?

Но «C POSIX lib» содержит некоторые заголовки, не указанные в «C стандартной lib», такие как , и .

Возьмем в качестве примера, я полагаю, что его коллега «C standard lib» – это , то если я хочу написать многопоточную программу в Linux, в какой файл заголовка я должен включить, или ?

POSIX – это надстройка стандартной библиотеки C, и важно отметить, что она от нее зависит. Если C и POSIX находятся в конфликте, выигрывает C.

Сокеты, файловые дескрипторы, разделяемая память и т. Д. Являются частью POSIX, но не существуют в библиотеке C.

pthread.h используется для streamов POSIX и threads.h – это новый заголовок для C11 и является частью библиотеки C. Возможно, pthreads будут устаревать в будущем в пользу C, но вы, вероятно, не можете рассчитывать на то, что C11 будет иметь широкое развертывание. Поэтому, если вам нужна переносимость, вы должны теперь использовать pthreads. Если переносимость не вызывает беспокойства, и у вас есть streamи C11, вы, вероятно, должны их использовать.

Библиотека C POSIX является спецификацией стандартной библиотеки C для систем POSIX. Он был разработан в то же время, что и стандарт ANSI C. Были предприняты определенные усилия для обеспечения совместимости POSIX со стандартом C; POSIX включает дополнительные функции для тех, которые введены в стандартном C.

Цитата 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 непреднамерен.

Я перечислил некоторые основные расширения API: я никогда не понимал: что такое POSIX?