有没有办法将sigaction()传递给具有多个参数的信号处理程序?

时间:2011-10-24 20:12:09

标签: c parameters handler signals

我每次收到SIGINT时都会使用sigaction()来执行操作。我见过的所有教程都使用这个原型作为信号处理程序

void sig_handler(int sig);

有没有办法让它采取更多的参数,以满足我的需求?例如,

void sig_handler(char* surname, int age);

这是我的代码:

void sig_handler(int sig) {
    printf("SIGINT(%d) received\n", sig);
}

int main( ){
    struct sigaction act;
    act.sa_handler=sig_handler;

    sigaction(SIGINT, &act, NULL);

    while(1){};
    return 0 ;
}

2 个答案:

答案 0 :(得分:2)

不是直接的,但您可以设置一个全局变量来告诉您sig_handler()该怎么做。

int ACTION = 0;

void sig_handler(int sig) {
    if (sig == SIGINT) {
        switch (ACTION) {
          case 0: other_function(char* surname, int age);
          break;
        // more cases
        default:
          ;
        }
    } else if ( ....  // more signals
    }
}

int main( ){
    struct sigaction act;
    act.sa_handler=sig_handler;

    sigaction(SIGINT, &act, NULL);

    while(1){};
    return 0 ;
}

答案 1 :(得分:1)

你不能用信号做到这一点。如何提供和交付这些参数?信号只是一个预定义的数字代码,它使进程通过中断主流来异步执行处理程序。

但是,您可以使用Unix套接字,管道或fifo文件。