【发布时间】:2016-05-27 07:12:01
【问题描述】:
信号处理程序如何在不将参数传递给main() 中的signalhandler() 函数的情况下获取信号编号?
例如,在main() 内的以下源代码中,将信号系统调用的第二个参数传递为signalhandler,在信号处理程序中没有任何参数,但是在到达signalhandler 定义时,它正在收集一个名为sig_num 的参数。 ..
实际上这怎么可能?
根据 ANSI C,如果我们不传递任何参数,那么函数定义将不会收集任何参数。
请帮我解决这个问题。
#include<stdio.h>
#include<signal.h>
void signalhandler(int sig_num)
{
printf("caught signal number: %d\n", sig_num);
}
int main(void)
{
while(1)
{
printf("hello world\n");
sleep(1);
signal(SIGINT, signalhandler);
}
}
【问题讨论】:
-
你明白
signal不是直接调用signalhandler吧? -
您能详细解释一下吗?
-
让我换一种说法 - 你认为
signal做了什么? -
信号在生成相应信号时执行它的默认行为,例如,如果我按 ctrl+c 它将终止程序...并修改此操作,我正在编写一个信号处理程序..
-
否:
signal()设置将在信号事件上调用的处理函数。该调用由内核进行,内核会将信号事件 ID(信号编号)传递给您使用signal()设置的处理函数。