复制Bash的信号终止消息

时间:2018-05-21 15:13:18

标签: c shell signals

现在,我正在创建一个程序,该程序应该模仿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 :(得分:2)

尝试strsignal标题中的string.hpsignal中的signal.h。阅读他们的手册页以获取文档。

答案 1 :(得分:0)

如果您只需要原始描述,请使用@ ZanLynx的解决方案。

否则,通常和/或如果您因某种原因需要调整消息:替换if/else if链或switch的常用方法是创建索引对应的表条件,即:

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

然后,用以下代码替换原始代码:

fprintf(stderr, messages[signal]);