Программирование в стандарте POSIX

Опрос конфигурационных параметров хоста


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

Основная часть статической конфигурационной информации сосредоточена в упоминавшемся ранее заголовочном файле <unistd.h>. Кратко опишем наиболее важные характеристики.

_POSIX_VERSION

Поддерживаемая версия системного интерфейса для языка C стандарта POSIX. Для POSIX-2001 значение этой константы должно равняться 200112L. Предыдущей версии (1996 года) соответствует значение 199506L.

_POSIX2_VERSION

Поддерживаемая версия интерфейса к системным сервисам на уровне командного языка и служебных программ; для реализаций, соответствующих стандарту POSIX-2001, значение этой константы должно равняться 200112L.

В листинге 10.4 показан пример использования значения _POSIX_VERSION для условной компиляции.

#if _POSIX_VERSION >= 200112L /* Используем новую функцию, применимую к */ /* большим файлам */ off_t fpos = ftello (fp); #else /* Либо реализация поддерживает только */ /* старую версию стандарта POSIX, либо */ /* константа _POSIX_VERSION вообще не */ /* определена. */ /* Используем старую, традиционную функцию */ /* опроса текущей позиции в файле */ long fpos = ftell (fp); #endif

Листинг 10.4. Пример условной компиляции с использованием конфигурационной константы _POSIX_VERSION. (html, txt)

Следующая группа констант описывает поддерживаемые необязательные возможности стандарта POSIX-2001. Значения этих констант могут равняться -1 (необязательная возможность не поддерживается), 0 (в системе присутствуют все необходимые описания, но наличие поддержки нужно опросить во время выполнения) или быть положительными (возможность полностью поддерживается реализацией).

_POSIX_CHOWN_RESTRICTED

Функции chown() и fchown() могут вызываться для смены владельца только процессами, обладающими соответствующими привилегиями.


_POSIX_IPV6

Реализация поддерживает IPv6. Положительное значение этой константы должно равняться 200112L.

_POSIX_JOB_CONTROL

Реализация поддерживает управление заданиями.

_POSIX_NO_TRUNC

Компоненты маршрутных имен, имеющие длину более NAME_MAX, вызывают сообщения об ошибках.

_POSIX_REGEXP

Реализация поддерживает обработку регулярных выражений.

_POSIX_SAVED_IDS

Каждый процесс имеет сохраненный ПДП-идентификатор и сохраненный ПДГ-идентификатор.

_POSIX_SHELL

Реализация поддерживает стандартный командный интерпретатор.

_POSIX_VDISABLE

Значением этой константы должен быть символ, отключающий обработку соответствующего специального управляющего символа терминала, если его (символ _POSIX_VDISABLE) сделать значением элемента массива c_cc[].

_POSIX2_C_BIND

Реализация поддерживает системный интерфейс для языка C. Значение этой константы должно равняться 200112L.

_POSIX2_CHAR_TERM

Реализация поддерживает по крайней мере один тип терминалов.

_POSIX2_LOCALEDEF

Реализация поддерживает создание языково-культурных сред. Положительное значение должно равняться 200112L.

_POSIX_V6_ILP32_OFF32

Реализация предоставляет среду компиляции C-программ с 32-битными типами int, long, off_t и такими же указателями.

_POSIX_V6_ILP32_OFFBIG

Реализация предоставляет среду компиляции C-программ с 32-битными типами int, long и такими же указателями; размер значений типа off_t составляет не менее 64 бит.

_POSIX_V6_LP64_OFF64

Реализация предоставляет среду компиляции C-программ с 32-битным типом int и 64-битными указателями и типами long и off_t.

_POSIX_V6_LPBIG_OFFBIG

Реализация предоставляет среду компиляции C-программ с не менее чем 32-битными значениями типа int и не менее чем 64-битными указателями и значениями типов long и off_t.

_POSIX_ASYNC_IO

Поддерживается асинхронный ввод/вывод.

_POSIX_PRIO_IO

Поддерживается приоритетный ввод/вывод.

_POSIX_SYNC_IO

Поддерживается синхронизированный ввод/вывод.

Три константы задают номера файловых дескрипторов для стандартных ввода (STDIN_FILENO со значением 0), вывода (STDOUT_FILENO – 1) и протокола (STDERR_FILENO – 2).Их нужно не анализировать, а использовать вместо явных числовых значений.


Содержание раздела