当前位置: 技术问答>linux和unix
信号函数signal的问题
来源: 互联网 发布时间:2017-02-04
本文导语: 小弟正在学习Linux信号编程. 看到书上有一个例子,有点搞不懂.请问:signal(SIGHUP, sigroutine)中的sigroutine是不是指向函数的指针? 还有void sigroutine(int dunno) 中的dunno不是形参吗?没有赋值怎么会有值呢? 请高手为我解惑,谢...
小弟正在学习Linux信号编程.
看到书上有一个例子,有点搞不懂.请问:signal(SIGHUP, sigroutine)中的sigroutine是不是指向函数的指针?
还有void sigroutine(int dunno) 中的dunno不是形参吗?没有赋值怎么会有值呢?
请高手为我解惑,谢了
void sigroutine(int dunno)
{
switch (dunno)
{
case 1:printf("Capture SIGHUP signal, the signal number is %dn", dunno); break;
case 2:printf("Capture SIGINT signal, the signal number is %dn", dunno); break;
case 3:printf("Capture SIGQUIT signal, the signal number is %dn", dunno);break;
}
return;
}
int main(void)
{
printf("process ID is %dn",getpid());
if(signal(SIGHUP, sigroutine) == SIG_ERR) {
printf("Couldn't register signal handler for SIGHUP!n");
}
if(signal(SIGINT, sigroutine) == SIG_ERR)
{
printf("Couldn't register signal handler for SIGINT!n");
}
if(signal(SIGQUIT, sigroutine) == SIG_ERR)
{
printf("Couldn't register signal handler for SIGQUIT!n");
}
while(1)
sleep(1);
return 0;
}
看到书上有一个例子,有点搞不懂.请问:signal(SIGHUP, sigroutine)中的sigroutine是不是指向函数的指针?
还有void sigroutine(int dunno) 中的dunno不是形参吗?没有赋值怎么会有值呢?
请高手为我解惑,谢了
void sigroutine(int dunno)
{
switch (dunno)
{
case 1:printf("Capture SIGHUP signal, the signal number is %dn", dunno); break;
case 2:printf("Capture SIGINT signal, the signal number is %dn", dunno); break;
case 3:printf("Capture SIGQUIT signal, the signal number is %dn", dunno);break;
}
return;
}
int main(void)
{
printf("process ID is %dn",getpid());
if(signal(SIGHUP, sigroutine) == SIG_ERR) {
printf("Couldn't register signal handler for SIGHUP!n");
}
if(signal(SIGINT, sigroutine) == SIG_ERR)
{
printf("Couldn't register signal handler for SIGINT!n");
}
if(signal(SIGQUIT, sigroutine) == SIG_ERR)
{
printf("Couldn't register signal handler for SIGQUIT!n");
}
while(1)
sleep(1);
return 0;
}
|
#include
#include
#include
void test_proc(int no)
{
printf("%dn", no);
}
void test(int no, void (*fun)(int))
{
printf("Call sub routinen");
fun(no);
printf("Return from sub routinen");
}
int main(void)
{
test(5, test_proc);
return 0;
}
|
请问:signal(SIGHUP, sigroutine)中的sigroutine是不是指向函数的指针?
=================
对,这个函数的原型就是void f(int);
还有void sigroutine(int dunno) 中的dunno不是形参吗?没有赋值怎么会有值呢?
=================
某个信号发生后,调用你的信号处理函数的时候,系统会把触发这个动作的信号的编号作为参数传入
=================
对,这个函数的原型就是void f(int);
还有void sigroutine(int dunno) 中的dunno不是形参吗?没有赋值怎么会有值呢?
=================
某个信号发生后,调用你的信号处理函数的时候,系统会把触发这个动作的信号的编号作为参数传入