我需要在linux中按照其编号打印信号名称,但是strsignal(9)返回信号描述(“Killed”)但不返回名称 - SIGKILL。除了在源代码中插入预定义数组外,有没有办法获得这样的名称?
答案 0 :(得分:1)
我想不出它的任何标准功能。您可以使用脚本生成函数:
echo "#include <signal.h>" |\
g++ -E -dD -xc++ - |\
awk '$2~/^SIG[A-Z]/ && $3~/[0-9]+/ { print "case "$2": return \""$2"\";" }' \
> signal_to_str_cases.inc
然后在代码中:
#include <signal.h>
char const* signal_to_str(int signo) {
switch(signo) {
#include "signal_to_str_cases.inc"
default: return "<unknown signo>";
}
}
答案 1 :(得分:0)
上述的traceway解决方案确实很好,但是,如果您有多个具有相同编号的信号,则会出现问题。在这种情况下,代码不会编译,并会给你一个错误,例如&#34;重复的案例值&#34;。修复它的一种方法是不为重复值生成案例:
echo "#include <signal.h>" |\
g++ -E -dD -xc++ - |\
awk '$2~/^SIG[A-Z]/ && $3~/[0-9]+/ && !seen[$3]++ { print "case "$2": return \""$2"\";" }' \
> signal_to_str_cases.inc