В моем терминале есть специальные ключи, такие как ^ C для прерывания, ^ \ для сброса ядра, ^ W для удаления слова и ^ U для удаления строки. Специальные ключи существуют в xterm и других эмуляторах терминала, но они не одинаковы в каждом терминале. Приложения POSIX могут вызывать tcgetattr () или tcsetattr () в , чтобы получить или установить эти специальные ключи. Они также могут отключить некоторые ключи, например:
tcgetattr(fd, tp);
tp->c_lflag &= ~ISIG; /* disable all the signal keys */
tp->c_cc[WERASE] = _POSIX_VDISABLE; /* disable the word-erase key */
tcsetattr(fd, tp);
До POSIX.1-2001 поддержка _POSIX_VDISABLE была необязательной. Было 3 варианта:
- _POSIX_VDISABLE был определен, а не -1. Тогда любой терминал может использовать _POSIX_VDISABLE для отключения специального ключа.
- _POSIX_VDISABLE был определен и равен -1. Тогда ни один терминал не может использовать _POSIX_VDISABLE.
- _POSIX_VDISABLE не был определен. Тогда значение для отключения специального ключа может быть разным для каждого терминала. Вызов типа
pathconf("/dev/tty", _PC_VDISABLE)
вернул бы значение для этого терминала или -1, если у этого терминала нет значения для отключения специального ключа.
Когда системы добавили , все или почти все системы определяли _POSIX_VDISABLE, а не -1. Я смотрел на некоторые старые системы в дереве Unix . Во всех Minix 1.5 (1989), Linux 0.96c (1992) и 4.4BSD (1993) определено _POSIX_VDISABLE, а не -1. (До POSIX не существовало, и системы использовали другой заголовок, например , для настройки терминала.)
POSIX-1.2001 просто требовал, чтобы _POSIX_VDISABLE был определен, а не -1. POSIX.1-2001 для ,
_POSIX_VDISABLE
Этот символ должен быть определен как значение символа, который должен отключить обработку специальных символов терминала, как описано в . Этот символ всегда должен иметь значение, отличное от -1.
Обоснование гласит: ,
В рамках пересмотра произошло некоторое согласование опций с профилем FIPS 151-2 по стандарту POSIX.1-1990. Следующие опции из стандарта POSIX.1-1990 теперь являются обязательными:
- _POSIX_JOB_CONTROL
- _POSIX_SAVED_IDS
- _POSIX_VDISABLE