Какая связь между POSIX и языком C? - PullRequest
6 голосов
/ 17 мая 2019

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

На практике, однако, недавно я пытался создать учебник на простом C-сервере HTTP , который использует заголовочные файлы, которые не являются частью стандарта C.Таким образом, в этом случае самое простое из приложений, которое я могу себе представить, - приложение C, содержащее одну функцию int main(void), которая имеет длину менее 100 строк, с целью прослушивания через сетевой интерфейс выходит за рамки стандарта C?

В этом случае, какова связь между языком C как спецификацией и (если я пишу приложение для Linux) спецификацией POSIX как языком?

Насколько я могу судить"man7.org" предоставляет список заголовочных файлов C, которые определяют API всех систем Unix / Linux (я предполагаю, что это то же самое, что и POSIX), а также список системных вызовов дляПлатформа Linux.

Это включает 82 заголовочных файла, из которых заголовки стандартной библиотеки 29 C являются подмножеством, и около 10 000 системных вызовов (по крайней мере, я предполагаю, что все в этом списке ,НЕ является заголовочным файлом - это системный вызов)и использовать специальные заголовочные файлы ОС.Разве не было бы более точным сказать, что программирование приложения для запуска в Linux на самом деле было бы «программированием POSIX»?

Полагаю, можно было бы также придерживаться стандартной библиотеки и определять собственные файлы заголовков дляреализация переносимой логики в системах POSIX и не POSIX (включая подпрограммы сборки для конкретной платформы).Это когда-нибудь было сделано?

Ответы [ 2 ]

6 голосов
/ 17 мая 2019

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

Существует много популярных кроссплатформенных библиотек. Одна из популярных библиотек, которая касается областей, которые в основном касаются спецификации POSIX C, - это Apache Portable Runtime :

Миссия проекта Apache Portable Runtime (APR) - создавать и поддерживать библиотеки программного обеспечения, которые обеспечивают предсказуемый и согласованный интерфейс для базовых реализаций, специфичных для платформы. Основная цель состоит в том, чтобы предоставить API, с помощью которого разработчики программного обеспечения могут кодировать и быть уверенными в предсказуемом, если не идентичном поведении, независимо от платформы, на которой построено их программное обеспечение, освобождая их от необходимости кодировать особые условия для обхода или принятия Преимущество специфичных для платформы недостатков или возможностей.

APR включает такие вещи, как socket s и потоков и процессов и может использоваться для компиляции одного и того же приложения для различных операционных систем - многих Unix-подобных и Windows - с минимальным меняется.

2 голосов
/ 17 мая 2019

POSIX - это не стандарт, а семейство стандартов , определяющее всю операционную систему.

Стандарт POSIX C является надмножеством стандартной библиотеки C, взаимосвязь между ними хорошо описана в этот другой вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...