Разница между стандартной библиотекой C и библиотекой C POSIX
Меня немного смущают "C стандартная библиотека" и "C POSIX lib", потому что я обнаружил, что многие заголовочные файлы, определенные в "C POSIX lib", также являются частью "C стандартной библиотеки".
Итак, я предполагаю, что "стандартная библиотека C" - это библиотека, определенная организацией ANSI C, и существуют разные реализации на разных платформах (Win32/Unix-подобные), а "C POSIX lib" - просто реализация для "стандарта C" lib "в Unix-подобных ОС, верно?
Но "C POSIX lib" содержит некоторые заголовки, не указанные в "C стандартной 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. Возможно, в будущем pthread-ы будут устаревшими в пользу 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
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.
Ссылки на части стандарта ИСО / МЭК 9899:1999 (в дальнейшем именуемого стандартом ИСО С) приведены для описания требований, также предусмотренных этим томом POSIX.1-2008. Некоторые функции и заголовки, включенные в этот том POSIX.1-2008, имеют версию в стандарте ISO C; в этом случае маркировка CX добавляется соответствующим образом, чтобы показать, где был расширен стандарт ISO C (см. коды). Любой конфликт между этим томом POSIX.1-2008 и стандартом ISO C является непреднамеренным.
Я перечислил некоторые основные расширения API по адресу: я так и не понял: что такое POSIX?
Я думаю, что ANSI C все еще жив: ANSI C унаследован и расширен ISO C, Cxx. POSIX полностью подчиняется ANSI C."
Мы можем легко написать ANSI C для Windows, Unix-подобных, встроенных устройств; но могут возникнуть проблемы с Cxx или POSIX.