现在,我正在创建一个程序,该程序应该模仿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 ");
}
...
}
这似乎是在尝试使用蛮力。
答案 0 :(得分:2)
尝试strsignal
标题中的string.h
或psignal
中的signal.h
。阅读他们的手册页以获取文档。
答案 1 :(得分:0)
如果您只需要原始描述,请使用@ ZanLynx的解决方案。
否则,通常和/或如果您因某种原因需要调整消息:替换if/else if
链或switch
的常用方法是创建索引对应的表条件,即:
const char * messages[] = {
...
"Bus error",
"Floating point exception",
"Segmentation fault",
...
};
然后,用以下代码替换原始代码:
fprintf(stderr, messages[signal]);