что если значение _POSIX_VDISABLE равно -1? - PullRequest
4 голосов
/ 23 мая 2010

В значении POSIX _POSIX_VDISABLE, если -1, нет символа отключения для специального символа для всех файлов оконечного устройства; в противном случае это значение отключает символьное значение.

Может кто-нибудь помочь мне понять это. Я не могу понять точное значение этого.

Пожалуйста

Ответы [ 2 ]

3 голосов
/ 23 мая 2010

Если вы посмотрите на определение специальных символов , это должно означать (значение '-1'), что все эти специальные символы активны:

При каноническом вводе драйвер терминала распознает ряд специальных символов, которые выполняют различные функции управления.
К ним относятся символ ERASE (обычно DEL ) для редактирования ввода и другие символы редактирования.
Символ INTR (обычно Ctrl - c ) для отправки сигнала SIGINT и других повышающих сигнал символов может быть доступен в режиме канонического или неканонического ввода.

И у вас есть много таких персонажей:


Был задан вопрос, было ли такое значение переносимым (всегда компилировалось) в 1997 году:

Формулировка в разделе 2.9.4:

Если для любой из констант в таблице 2-11 определено значение -1 в заголовке ....

может предложить при случайном чтении код, подобный следующему, чтобы минимизировать размер и оптимизировать эффективность для каждой реализации:

#ifdef _POSIX_VDISABLE
#if    _POSIX_VDISABLE == -1
    /* code that assumes no vdisable capability */
#else
    /* code that assumes vdisable capability */
#endif
#else
    /* code that uses pathconf() to determine vdisable capability */
#endif

Интерпретация # 34 предполагает, что так и будет.

Используя эти значения в COMPILE-TIME, переносимое приложение POSIX.1 может избежать загрузки всего кода, связанного с pathconf (), связанного с символом в таблице 2-11, когда символ определен.

2 голосов
/ 05 мая 2018

В моем терминале есть специальные ключи, такие как ^ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...