В конце 1989 года Американский национальный институт стандартов (ANSI)
утвердил стандарт языка программирования Си (X3.159-1989). Стандарт был
принят для улучшения переносимости, написанных на языке Си программ, между
различными типами ОС. Таким образом, в стандарт, кроме синтаксиса и семантики
языка Си, вошли рекомендации по содержанию стандартной библиотеки. О наличии
поддержки стандарта ANSI C говорит предопределенное символьное имя _STDC_.
BSD4.x (Berkeley Unix)
Формальный стандарт, основанный на отличиях имеющихся в BSD UNIX. Например,
наличие
символических ссылок, функции select, особенности обработки сигналов
и набором функций по работе с сокетами. Поддерживается большинство возможностей
описанных в стандартах ANSI, POSIX.1 и POSIX.2. Определяется с помощью
предопределенного символьного имени _BSD_SOURCE.
GLIBC (GNU C library)
Формальный стандарт, описывает возможности библиотеки GNU
LIBC. Поддерживаются стандарты ANSI C, POSIX.1, BSD, SVID. Определяется
с помощью предопределенных символьных имен _GNU_SOURCE и __GNUC__. Если
сборка программы производится под ОС "семейства" UNIX, определены символические
имена unix и __unix__, дополнительно при компиляции под ОС LINUX определяются
имена linux и __linux__, под FreeBSD - __FreeBSD__.
IEEE (Institute of Electrical
and Electronics Engineers)
POSIX (Portable
Operating System Interface)
В связи с образованием двух различных направлений развития ОС UNIX - System
V и BSD, потребовалось определить некоторый общий для этих направлений
интерфейс, который являлся бы по сути объединением средств System V и BSD.
В 1985 году, на базе существующих инициативных групп по стандартизации
, были созданы рабочие группы POSIX (неоценимый вклад внес Richard
Stallman). В 1988 году был разработан стандарт POSIX 1003.1-1988 (два года
спустя был принят как стандарт IEEE 1003.1-1990, ISO/IEC 9945:1:1990),
определяющий минимальные требования к программному интерфейсу (API), необходимому
в ОС. Позднее были разработаны дополнение к стандарту POSIX.1, это POSIX.1b
( интерфейс ОС реального времени) и POSIX.1c ( интерфейс "нитей" (Threads)
).
Программный интерфейс не делает различия между библиотечными функциями
и системными вызовами, определяя таким образом только независящий от конкретной
реализации ОС интерфейс.
В настоящее время функционируют следующие направления деятельности
рабочих групп POSIX:
P1003.1 System Interfaces
(API)
P1003.1b Realtime System
Interfaces (API)
P1003.1c Threads System
Interfaces (API)
P1003.1i Realtime System
Interfaces (API)
P1003.2 Shell and
Utilities
P1003.3 Test Methods
P1003.4 Realtime
P1003.5 Ada Bindings
P1003.6 Security
P1003.7 System Administration
P1003.8 Transparent
File Access
P1003.9 Fortran Bindings
P1003.10 Supercomputing
Profile
P1003.11 Transaction Processing
Profile
P1003.12 Protocol-Independent
Network Specification
P1003.13 Realtime Profile
P1003.14 Multiprocessing
Profile
P1003.15 Batch System
P1003.16 C-Language Bindings
P1003.17 Directory/Name
Services
P1003.18 POSIX Platform
Profile
P1201.1 Human-Computer
Interfaces
P1201.2 User Interface
Drivability
P1224
X.400 Electronic Mail Services API
P1237
RPC
P1238.0 FTAM API (OSI
Application Layer API (ASCE))
P1238.1 OSI Networking
API
Для определения соответствия своей программы стандарту POSIX.1
в программе должны быть определены символические имена _POSIX_SOURCE
или _POSIX_C_SOURCE. Проверить поддержку системой стандартов POSIX, можно
с помощью макроимени_POSIX_VERSION.
Следует заметить, что в стандартах не определены такие популярные
функции как getopt_long(), snprintf(), asprintf(), vscanf(), getdelim(),
getline(), memmem(), r_alloc(), strsignal(), etc., поэтому, для обеспечения
переносимости приложений, нужно избегать использования таких функций, либо
предусмотреть наличие кода-заменителя в вашей программе ( для этого можно
воспользоваться системой autoconfigure и взять код-заменитель из ближайшей
GPL программы).
SVID (The System V Interface
Description)
Стандарт описывающий внешние интерфейсы и соответствие ОС System V.
Поддерживается большинство возможностей описанных в стандартах ANSI, POSIX.1
и POSIX.2. Определяется с помощью предопределенного символьного имени _SVID_SOURCE.
Самые современные из имеющихся стандартов (родились из X/Open XPG). Содержат
требования, которым должна соответствовать современная UNIX система, стандарт
определяет три типа UNIX систем, возлагая на них разный уровень требований,
- система базовой конфигурации (~1400 функций), рабочая станция (~3000
функций) и сервер (UNIX
98 Base, UNIX 98 Workstation, UNIX 98 Server). Требования, в свою очередь,
разбиваются на формальные (1003.1, 1003.1c threads, 1003.1b Realtime, ISO
C Amendment1) и индустриальные (Aspen Threads, 64bit API, Large File Summit,
Dynamic Linking, Y2K).
В расширение стандарта для рабочих станций вошла поддержка GUI, в расширение
для сервера - поддержка JavaTM Virtual Machine support, TCP/IP, SNMP,
Hypertext Protocol Transfer Services, Domain Name Service, Terminal &
File Services, Mail Services Client Booting Services, Time Services and
Directory Services. Более подробно со стандартом UNIX-98
можно ознакомится на сервере www.unix-systems.org.
X/Open
В 1984 году была создана организация X/Open, целью открытия этой
организации являлось создание общего набора интерфейсов для обеспечения
минимизации усилий по переносу приложений между различными UNIX системами.
Были разработаны ряд руководств, под названием XPG (X/Open Portability
Guide), которые сперва (до версии 3 включительно) охватывали POSIX.1/.2,
ANSI C и стандарт на X Window System, затем добавили поддержку особенностей
BSD и System V (SVID), в итоге была выпущена спецификация XPG4. Спецификации
XPG образуют систему CAE (X/Open Common Application Environment ) в
которой собраны и систематизированы основные стандарты и рекомендации по
построению открытых систем. Например, приложения, которые соответствуют
CAE, обязательно соответствуют стандартам POSIX.1 и ANSI C, но не наоборот.
В 1996 году, после объединения X/Open и OSF, был создан консорциум The
Open Group, стандарт XGP4 получил название UNIX 95.
Пройдемся
по стандартам....
UNIX
System Interface Tables - содержит список всех команд и системных вызовов
определенных в стандартах и спецификациях: UNIX-98, UNIX 95, ISO POSIX-1
(IEEE 1003.1),ISO POSIX-2 (IEEE 1003.2), ISO C, SVID3 и 4.3BSD.
Команды
от A до Z Системные вызовы: [A-C][D-F][G-I][J-L][M][N-O][P][Q-R][S][T][U-V][W-Y]
Так же доступны PDF
и Postscript
версии документа.