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

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

Итак, я предполагаю, что "c standard lib"-это lib, определенный организацией ANSI C, и есть разные реализации на разных платформах (Win32/Unix-like), а "c POSIX lib" - это просто реализация для "C standard lib" на Unix-подобных ОС, верно?

но "c POSIX lib" содержит некоторые заголовки не указано в "C standard lib", например <sys/types.h>, <sys/wait.h> и <pthread.h>.

взять <pthread.h> в качестве примера я предполагаю, что его аналог "c standard lib" -<threads.h>, затем, если я хочу написать многопоточную программу на Linux, какой файл заголовка я должен включить,<pthread.h> или <threads.h>?

3 ответов


POSIX является надмножеством стандартной библиотеки C, и важно отметить, что она отсылает к нему. Если C и POSIX когда-либо конфликтуют, c выигрывает.

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

pthread.h используется для потоков POSIX и threads.h является новым заголовком Для C11 и является частью библиотеки C. Возможно, pthreads будут осуждены когда-нибудь в будущем в пользу C, однако вы, вероятно пока не могу рассчитывать на широкое развертывание C11. Поэтому, если вы хотите переносимость, вы должны предпочесть pthreads на данный момент. Если переносимость не является проблемой, и у вас есть потоки 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?