当前位置: 技术问答>linux和unix
初学,请教一个信号问题,这个方法不理解
来源: 互联网 发布时间:2015-06-22
本文导语: 程序如下: #include static void sig_usr(int) int main(void) { if(signal(SIGUSR1,sig_usr)==SIG_ERR)//这里的sig_usr不是静态方法吗,如何理解? { printf("can't catch SIGUSR1n"); } for(;;) pause(); } static ...
程序如下:
#include
static void sig_usr(int)
int main(void)
{
if(signal(SIGUSR1,sig_usr)==SIG_ERR)//这里的sig_usr不是静态方法吗,如何理解?
{
printf("can't catch SIGUSR1n");
}
for(;;)
pause();
}
static void sig_usr(int signumber)
{
if(signumber==SIGUSR1)
printf("received SIGUSR!n");
return;
}
//不是很理解sig_usr这里为何这样调用,为何不是sig_usr(int)??
这个简单问题,希望大家解析下,我不是很懂,谢谢了
#include
static void sig_usr(int)
int main(void)
{
if(signal(SIGUSR1,sig_usr)==SIG_ERR)//这里的sig_usr不是静态方法吗,如何理解?
{
printf("can't catch SIGUSR1n");
}
for(;;)
pause();
}
static void sig_usr(int signumber)
{
if(signumber==SIGUSR1)
printf("received SIGUSR!n");
return;
}
//不是很理解sig_usr这里为何这样调用,为何不是sig_usr(int)??
这个简单问题,希望大家解析下,我不是很懂,谢谢了
|
函数指针理解吗?signal(SIGUSR1,sig_usr)是给SIGUSR1信号注册了一个信号处理函数,即sig_usr。如果不了解函数指针,找本C语言基础书看看,比如TCPL。
|
楼上说的对,signal的第二个参数是一个指向函数的指针,这个函数可以由我们自己来定义,在指向你的函数的时候,会把第一个参数传给你的函数!
|
signal中,第二个参数是函数指针,函数调用后面要()
|
sig_usr
编译完后 它其实是个相对地址 也就是函数指针
你告诉系统 怎么调用是系统的事情了
最后的形势
还是static void sig_usr(int)
但好像
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
编译完后 它其实是个相对地址 也就是函数指针
你告诉系统 怎么调用是系统的事情了
最后的形势
还是static void sig_usr(int)
但好像
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);