日期:2014-05-16  浏览次数:20734 次

信号函数signal的问题
小弟正在学习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 %d\n", dunno); break;
  case 2:printf("Capture SIGINT signal, the signal number is %d\n", dunno); break;
  case 3:printf("Capture SIGQUIT signal, the signal number is %d\n", dunno);break;
  }
  return;
}
int main(void) 
{
  printf("process ID is %d\n",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;
}

------解决方案--------------------
探讨

singal函数的第一个参数不就是传给sigroutine的吗?

------解决方案--------------------
请问:signal(SIGHUP, sigroutine)中的sigroutine是不是指向函数的指针?
=================
对,这个函数的原型就是void f(int);

还有void sigroutine(int dunno) 中的dunno不是形参吗?没有赋值怎么会有值呢?
=================
某个信号发生后,调用你的信号处理函数的时候,系统会把触发这个动作的信号的编号作为参数传入