Как проверить, что пользователь установил для стирания/возврата в stty, используя c

В Unix настройки по умолчанию для определенных ключей различаются для каждой платформы. Например, стереть в Ubuntu может быть erase = ^?. Но тогда для AIX все может быть совершенно иначе, как в примере erase = ^H. Как проверить настройку stty в C?

Это то, что я пытался написать

#include<stdio.h>
#include<stdlib.h>
#include<termios.h>
#include<unistd.h>

int main()
{
  struct termios term;

  if(tcgetattr(STDIN_FILENO, &term) < 0)
  {
     printf("Error to get terminal attr\n");
  }

  printf("The value for Erase is %s\n",term.c_cc[ERASE]);

  return 0;
}

После компиляции с помощью gcc. Там написано, что ERASE необъявлен. Итак, что на самом деле является правильным вариантом или переменной, которую я должен использовать?


person Mohd Fikrie    schedule 20.02.2014    source источник


Ответы (1)


printf("The value for Erase is %s\n",term.c_cc[ERASE]); должно быть printf("The value for Erase is %d\n",term.c_cc[VERASE]);, см. termios(3) для получения дополнительной информации. .

Символический индекс для символа стирания — VERASE; тип c_cc[VERASE] — это cc_t, в моей системе cc_t — это unsigned char, поэтому он должен быть напечатан с %c или %d.

person Lee Duhem    schedule 20.02.2014
comment
Точно. Все они хорошо задокументированы на справочной странице man 3 termios. (Эта ссылка указывает на проект справочных страниц Linux, который, на мой взгляд, является одним из самых надежных источников подобных подробностей. ) - person Nominal Animal; 20.02.2014