Можно ли удалить сигнал - PullRequest
1 голос
/ 09 апреля 2020

Можно ли удалить / удалить / переназначить сигнал? Например, ctrl- c фактически отправляет сигнал SIGINT. Могу ли я изменить это так, чтобы нажатие клавиши ctrl- c не генерировало сигнал, а записывало его значение ascii на стандартный ввод как любая другая клавиша?

Не знаю, ясно ли я, дон Не стесняйтесь спрашивать дополнительную информацию

РЕДАКТИРОВАТЬ:

Я хочу, чтобы мой терминал перестал отвечать на Ctrl- c в качестве сигнала

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

В системе POSIX вы можете контролировать, какой символ отправляет SIGINT, или установить его без символа.

struct termios t;
if (tcgetattr(STDIN_FILENO, &t) == 0) {
    t.c_cc[VINTR] = 0;  // set the INT character to 0 (disable)
    tcsetattr(STDIN_FILENO, TCSANOW, &t);
} else {
    // stdin is not a terminal
}

См. Общий интерфейс терминала , tcgetattr tcsetattr

0 голосов
/ 09 апреля 2020

Вы можете перехватывать сигналы внутри вашего кода и обрабатывать их при работе с sh.

Вот базовый пример c, вам нужно зарегистрировать обратный вызов для обработки сигнала, который вы хочу поймать. В этом случае SIGINT:

#include<stdio.h>
#include<signal.h>
#include<unistd.h>

void sig_handler(int signo)
{
  if (signo == SIGINT) {
    printf("received SIGINT\n");
  }
}

int main(void)
{
  if (signal(SIGINT, sig_handler) == SIG_ERR) {
    printf("\ncan't catch SIGINT\n");
  }
  // A long long wait so that we can easily issue a signal to this process
  while(1) {
    sleep(1);
  }

  return 0;
}

Итак, в этом примере функция sig_handler() зарегистрирована для обработки сигнала SIGINT с помощью вызова signal(SIGINT, sig_handler).

Больше примеров в здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...