Linuxでシグナル名をその番号で出力する必要がありますが、strsignal(9)はsignal( "Killed")の説明を返しますが、名前は返しません-SIGKILL。ソースコードに事前定義された配列を挿入する以外に、そのような名前を取得する方法はありますか?
質問する
1163 次
2 に答える
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>";
}
}
于 2012-11-22T13:57:09.970 に答える
0
上記のスクリプトウェイソリューションは確かに優れていますが、同じ番号の信号が複数ある場合は問題があります。この場合、コードはコンパイルされず、「大文字と小文字の値が重複しています」などのエラーが発生します。これを修正する1つの方法は、繰り返される値のケースを生成しないことです。
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
于 2018-03-19T15:37:10.290 に答える