Копирование сообщений окончания сигнала Bash - PullRequest
0 голосов
/ 21 мая 2018

Сейчас я делаю программу, которая должна имитировать, как Bash работает с сигналами.Существует ли более эффективный способ печати сообщений о завершении сигнала терминала (например, «ошибка сегментации», «недопустимая инструкция», «будильник» и т. Д.)?Потому что сейчас я имею в виду только длинную, длинную серию операторов if / else if для обслуживания каждого сигнала.

   if((WIFSIGNALED(status) && ((WTERMSIG(status) != SIGINT)))){

      ...

      else if(/*signal == 7*/){
         fprintf(stderr, "Bus error");
      }

      else if(/*signal == 8*/){
         fprintf(stderr, "Floating point exception");
      }

      ...

      if(/*signal == 11*/){
         fprintf(stderr, "segmentation fault ");
      }

      ...
}

Кажется, что это просто попытка использовать грубую силу.

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Если вам нужно только оригинальное описание как есть, используйте решение @ ZanLynx.

В противном случае, в общем, и / или если вам нужно настроить сообщения по какой-то причине: обычный способ заменить if/else if цепочка или switch предназначена для создания таблицы, для которой индекс соответствует условию, то есть:

const char * messages[] = {
    ...
    "Bus error",
    "Floating point exception",
    "Segmentation fault",
    ...
};

Затем вы заменяете исходный код на:

fprintf(stderr, messages[signal]);
0 голосов
/ 21 мая 2018

Попробуйте strsignal из заголовка string.h или psignal из signal.h.Прочитайте их справочные страницы для документации.

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