1

シグナル処理ステータスに関する情報を取得する関数を作成する必要があります。つまり、特定のハンドラーがある場合、またはシグナルが無視された場合、ブロックされたシグナル、およびアクティブ化されたフラグです。これを行うために、sigaction関数を使用します。これが私のコードです:

void show_signal_info(int signal_number){
    struct sigaction s;
    int nomask=1;

    if(sigaction(signal_number, NULL, &s) == -1){
        perror("Error getting information of signal");
    }else{
        printf("Signal name: %s\n",signal_name(signal_number));

        printf("Signal mask: ");
        for(i=0; i<32; i++){
            if(sigismember(s.sa_mask,i) == 1)
                printf("%s ",signal_name(i);
        printf("%s",nomask ? "None\n" : "\n");

        if(s.sa_handler == SIG_DFL)
             printf("Default\n");
        else if (s.sa_handler == SIG_IGN)
             printf("Ignored\n");
        else
             printf("Handler\n");

        [...]

    }
}

問題は、s.sa_flags でどのフラグがオンになっているかを確認する方法がわからないことです。関数で使用できるものに似たマクロがいくつかありますwait()か、それとも他の方法がありますか?

4

1 に答える 1

1

問題は、s.sa_flags でどのフラグがオンになっているかを確認する方法がわからないことです。

たとえば、次のようにビットをテストできます。

if (s.sa_flags & SA_RESTART)
    ....
于 2012-05-08T16:06:37.993 に答える