我每次收到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 ;
}
答案 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文件。