Разница между стандартной библиотекой C и библиотекой C POSIX - PullRequest
63 голосов
/ 21 февраля 2012

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

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

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

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

Ответы [ 4 ]

43 голосов
/ 21 февраля 2012

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

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

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

10 голосов
/ 21 февраля 2012

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

4 голосов

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?

0 голосов
/ 19 июня 2019

ANSI C все еще жив, я думаю: ANSI C наследуется и расширяется ISO C, Cxx. POSIX полностью подчиняется ANSI C. "

Мы можем легко написать ANSI C для Windows, Unix-Like, встроенного устройства; но Cxx или POSIX могут иметь проблемы.

...