Опубликован: 15.06.2004 | Доступ: свободный | Студентов: 2557 / 712 | Оценка: 4.35 / 3.96 | Длительность: 27:47:00
ISBN: 978-5-9556-0011-6

Лекция 10: Опрос характеристик хостов и их использование в приложениях

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >

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

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

Основная часть статической конфигурационной информации сосредоточена в упоминавшемся ранее заголовочном файле <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.

Следующая группа констант описывает поддерживаемые необязательные возможности стандарта 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_FILENO1 ) и протокола ( STDERR_FILENO2 ). Их нужно не анализировать, а использовать вместо явных числовых значений.

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >
Антон Коновалов
Антон Коновалов

В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13
Планируется ли актуализация материалов данного очень полезного курса?