5

signal(3) を使用して、実行中の OS で利用可能なすべてのシグナルのシグナルハンドラを登録するにはどうすればよいですか?

私のコードは次のようになります。

void sig_handler(int signum)
{
    printf("Received signal %d\n", signum);
}


int main()
{
    signal(ALL_SIGNALS_??, sig_handler);
    while (1) {
        sleep(1);
    };
    return 0;
}
4

2 に答える 2

7

ほとんどのシステムには、マクロNSIGor _NSIG(前者は名前空間に違反するため、標準準拠モードでは使用できません) が定義されsignal.hており、ループfor (i=1; i<_NSIG; i++)がすべてのシグナルをウォークします。また、シグナル マスクを持つ POSIX システムでは、どちらも定義されていないCHAR_BIT*sizeof(sigset_t)場合にフォールバックとして使用できるシグナル数の上限です。NSIG_NSIG

于 2013-06-22T23:37:00.943 に答える