В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13 |
Заключение
Общий терминальный интерфейс
В стандарте POSIX -2001 терминал или терминальное устройство определяется как символьный специальный файл, удовлетворяющий спецификациям общего терминального интерфейса.
С каждым терминальным устройством ассоциированы очереди ввода и вывода.
Ввод может происходить в каноническом и неканоническом режимах. Канонический режим означает построчную буферизацию ввода системой, а также естественную обработку символов забоя и уничтожения строки.
В неканоническом режиме входные данные не подвергаются препроцессированию системой, а обработка запроса на чтение зависит от двух параметров - min и time.
Некоторые символы играют специальную роль при вводе и/или выводе. Например, символ intr генерирует сигнал прерывания ( sigint ), посылаемый всем процессам, для которых данный терминал является управляющим.
Служебная программа tty выдает на стандартный вывод имя терминала, открытого в качестве стандартного ввода.
Узнать, ассоциирован ли открытый файловый дескриптор с терминальным устройством, а также получить имя этого устройства можно с помощью функций isatty() и ttyname().
Каждый терминал обладает рядом характеристик, которые можно опросить и/или изменить, используя утилиту stty.
Некоторые, хотя и весьма ограниченные, возможности управления терминалами предоставляет служебная программа tput.
На уровне функций опрос и изменение характеристик терминала разбиты на два семейства: tc*() и cf*(). В первое входят функции tcgetattr() - опрос, tcsetattr() - изменение, tcflow() - приостановка или возобновление терминального ввода/вывода, tcflush() - сброс очереди ввода, tcdrain() - ожидание физического окончания вывода, tcsendbreak() - разрыв соединения, tcgetpgrp() - получение идентификатора ассоциированной с терминалом группы процессов переднего плана, tcsetpgrp() - установка идентификатора группы, tcgetsid() - опрос идентификатора группы процессов лидера сеанса, для которого терминал является управляющим.
Функции семейства cf*() - cfgetispeed(), cfgetospeed(), cfsetispeed(), cfsetospeed() - служат для выборки/изменения данных о скорости терминального ввода/вывода.
Для получения маршрутного имени управляющего терминала служит функция ctermid().
Опрос характеристик хостов
Самую общую информацию о характеристиках хоста позволяют получить служебная программа uname и одноименная функция.
Функция gethostname() возвращает имя хоста.
Значения конфигурационных параметров - важнейшая характеристика хоста, а настройка на конфигурацию целевой системы - обязательный элемент мобильного программирования приложений.
Основная часть статической конфигурационной информации сосредоточена в заголовочном файле <unistd.h>. К числу наиболее важных характеристик принадлежат _POSIX_VERSION (поддерживаемая версия системного интерфейса для языка c стандарта POSIX ) и _POSIX2_VERSION (поддерживаемая версия интерфейса к системным сервисам на уровне командного языка и служебных программ).
Отдельная группа констант описывает поддерживаемые необязательные возможности стандарта POSIX -2001. Среди них _POSIX_IPV6 (реализация поддерживает IPv6 ), _POSIX_REGEXP (реализация поддерживает обработку регулярных выражений), _POSIX_SHELL (реализация поддерживает стандартный командный интерпретатор), _POSIX_V6_ILP32_OFF32 (реализация предоставляет среду компиляции C-программ с 32-битными типами int, long, off_t и такими же указателями) и т.д.
Три константы задают номера файловых дескрипторов для стандартных ввода ( STDIN_FILENO со значением 0), вывода ( STDOUT_FILENO - 1 ) и протокола ( STDERR_FILENO - 2 ).
Разного рода лимиты на количество и размеры заданы в заголовочном файле <limits.h>. Стандарт определяет минимально допустимые значения для подобных лимитов, которые должны поддерживаться реализациями и предоставляться приложениям.
Мобильным приложениям не следует полагаться на какие-то конкретные значения лимитов и требовать больше ресурсов, чем предусмотрено минимально допустимыми значениями.
Для опроса значений системных параметров во время выполнения предназначены служебная программа getconf, а также функции sysconf(), confstr(), fpathconf() и pathconf(), первая из которых опрашивает лимитирующие конфигурационные параметры, имеющие числовые значения, вторая возвращает конфигурационные цепочки символов, а две последние - конфигурационные значения, относящиеся к файлам.