2015-03-17 2 views
0

Я на самом деле пытаюсь сделать оболочку. Это школьный проект. Он работает отлично, но я хотел обрабатывать сигналы (например, ^C и ^D).Как не отображать сигналы на моей оболочке?

Так что я использовал signal.h lib (я нахожусь на Maverick OS), и, похоже, он работает нормально, моя оболочка не уйдет. Но это все еще небольшая проблема.

^C все еще отображается на моем терминах, и я не хочу, чтобы он отображался.

Я использовал функцию сигнала: signal(SIGINT, do_nothing);

do_nothing функция содержит:

void do_nothing(int sig) 
{ 
    if (sig) 
    { 
     ; 
    } 
} 

Как удалить символы сигнала?

+0

Что вы подразумеваете под символом 'delete signal? –

ответ

1

Независимо от того, обрабатывает ли ваша программа сигналы или нет, драйвер терминала имеет свое поведение. Например (см страницы termios вручную), настройка ECHOCTL актуальна:

 ECHOCTL 
      (not in POSIX) If ECHO is also set, terminal special 
      characters other than TAB, NL, START, and STOP are echoed as 
      ^X, where X is the character with ASCII code 0x40 greater than 
      the special character. For example, character 0x08 (BS) is 
      echoed as ^H. [requires _BSD_SOURCE or _SVID_SOURCE] 

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

+0

К сожалению для этого проекта мне не разрешено использовать канонический режим. Но спасибо за ответ. – Addict

+0

Режим * canonical * по существу является настройками терминала по умолчанию. Как вы можете найти в приведенном ниже примере кода, это отправная точка, которую вы можете полностью или полностью отменить, но для ее надежного использования потребуется базовое понимание. –

Смежные вопросы