2012-02-21 5 views
51

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

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

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

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

+5

ANSI C был устаревшим начиная с 1990 года, когда C стал международным стандартом. С тех пор C поддерживается [рабочей группой ISO] (http://www.open-std.org/jtc1/sc22/wg14/). – Lundin

+4

@ Lundin Полностью ерунда. ANSI C является не чем иным, как устаревшим. Фактически C11 был принят INCITS в качестве стандарта ANSI, известного как [INCITS/ISO/IEC 9899-2012] (http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012) который является новым стандартом ANSI C. – Wiz

+0

@Wiz Это международный стандарт, и это международный сайт. Имея это в виду, не имеет смысла говорить об ANSI C с 1990 года. Это то же самое, что если бы я начал ссылаться на C на этом сайте как «SS C», поскольку я из Швеции и шведского стандарта называется SS/ISO/IEC 9899. – Lundin

ответ

36

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

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

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

+0

Например, signal.h упоминается в http://en.wikipedia.org/wiki/C_standard_library и в http://en.wikipedia.org/wiki/C_POSIX_library. Но я до сих пор не понимаю. Является ли signal.h заголовком стандартной библиотеки C или доступен только в системах POSIX? –

+1

@KorayTugay лучший способ понять это - ИМО, чтобы перейти на веб-страницу [POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799) и найти [signal.h] (http: // pubs. opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html). Он отметил, что заголовок существует в стандартной библиотеке C, но POSIX распространяется на него. Расширения отмечены 'CX'. В нем говорится, что вам нужно добавить определение, но обычно расширения активируются флагами компилятора по умолчанию. Другой вариант - прочитать стандарт [C] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf). –

+0

Я не думаю, что pthreads будут устаревать в пользу потоков C11, тем более, что потоки C11 (за исключением одной несущественной детали) являются надлежащим подмножеством pthreads. – fuz

9

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

3

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, programm Языки: 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 по адресу: I never really understood: what is POSIX?

Смежные вопросы