Выбрать главу

1.3.1. Язык программирования C

К началу 1980-х годов язык C существовал уже в течение 10 лет и был реализован во множестве разнообразных UNIX-систем, а также в других операционных системах. В некоторых реализациях отмечались незначительные различия. В частности, это произошло из-за того, что определенные аспекты требуемого функционионала языка не были подробно описаны в существующем де-факто стандарте C. Этот стандарт приводился в вышедшей в 1978 году книге Кернигана (Kernighan) и Ритчи (Ritchie) «Язык программирования Cи». (Синтаксис языка C, описанный в этой книге, иногда называют традиционным C, или K&R C.) Кроме того, с появлением в 1985 году языка C++ проявились конкретные улучшения и дополнения, которые могли быть привнесены в C без нарушения совместимости с существующими программами. В частности, сюда можно отнести прототипы функций, присваивание структур, спецификаторы типов (const и volatile), перечисляемые типы и ключевое слово void.

Эти факторы побудили к стандартизации C. Ее кульминацией в 1989 году стало утверждение Американским институтом национальных стандартов (ANSI) стандарта языка C (X3.159-1989), который в 1990 году был принят в качестве стандарта (ISO/IEC 9899:1990) Международной организацией по стандартизации (ISO). Наряду с определением синтаксиса и семантики языка C в этом стандарте давалось описание стандартной библиотеки C, включающей возможности stdio, функции обработки строк, математические функции, различные файлы заголовков и т. д. Эту версию C обычно называют C89 или (значительно реже) ISO C90, и она полностью рассмотрена во втором издании (1988 года) книги Кернигана и Ритчи «Язык программирования Си».

Пересмотренное издание стандарта языка C было принято ISO в 1999 году (ISO/IEC 9899:1999; см. http://www.open-std.org/jtc1/sc22/wg14/www/standards). Его обычно называют C99, и он включает несколько изменений языка и его стандартной библиотеки. В частности, там описаны добавление типов данных long long и логического (булева), присущий C++ стиль комментариев (//), ограниченные указатели и массивы переменной длины. Новый стандарт для языка Си (ISO/IEC 9899:2011) опубликован 8 декабря 2011. В нем описаны поддержка многопоточности, обобщенные макросы, анонимные структуры и объединения, статичные утверждения, функция quick_exit, новый режим эксклюзивного открытия файла и др.

Стандарты языка C не зависят от особенностей операционной системы, то есть они не привязаны к UNIX-системе. Это означает, что программы на языке C, для написания которых использовалась только стандартная библиотека C, должны быть портированы на любой компьютер и операционную систему, предоставляющую реализацию языка C.

Исторически C89 часто называли ANSI C, и это название до сих пор иногда употребляется в таком значении. Например, оно используется в gcc, где спецификатор — ansi означает «поддерживать все программы ISO C90». Но мы будем избегать этого названия, поскольку теперь оно звучит несколько двусмысленно. После того как комитет ANSI принял пересмотренную версию C99, будет правильным считать, что стандартом ANSI C следует называть C99.

1.3.2. Первые стандарты POSIX

Термин POSIX (аббревиатура от Portable Operating System Interface) обозначает группу стандартов, разработанных под руководством Института инженеров электротехники и электроники — Institute of Electrical and Electronic Engineers (IEEE), а точнее, его комитета по стандартам для портируемых приложений — Portable Application Standards Committee (PASC, http://www.pasc.org/). Цель PASC-стандартов — содействие портируемости приложений на уровне исходного кода.

Название POSIX было предложено Ричардом Столлманом (Richard Stallman). Последняя буква X появилась потому, что названия большинства вариантов UNIX заканчивались на X. В стандарте указывалось, что название должно произноситься как pahzicks, наподобие слова positive («положительный»).

Для нас в стандартах POSIX наибольший интерес представляет первый стандарт POSIX, который назывался POSIX.1 (или в более полном виде POSIX 1003.1), и последующий стандарт POSIX.2.

POSIX.1 и POSIX.2

POSIX.1 стал IEEE-стандартом в 1988 году и после небольшого количества пересмотров был принят как стандарт ISO в 1990 году (ISO/IEC 9945-1:1990). (Полных версий POSIX нет в свободном доступе, но их можно приобрести у IEEE на сайте http://www.ieee.org/.)

POSIX.1 сначала основывался на более раннем (1984 года) неофициальном стандарте, выработанном объединением поставщиков UNIX под названием /usr/group.