linux常用c函数:信号处理篇

来源:Linux认证    发布时间:2012-11-10    Linux认证视频    评论

  如参数结构sigaction定义如下

  struct sigaction

  {

  void (*sa_handler) (int);

  sigset_t sa_mask;

  int sa_flags;

  void (*sa_restorer) (void);

  }

  sa_handler此参数和signal()的参数handler相同,代表新的信号处理函数,其他意义请参考signal()。

  sa_mask 用来设置在处理该信号时暂时将sa_mask 指定的信号搁置。

  sa_restorer 此参数没有使用。

  sa_flags 用来设置信号处理的其他相关操作,下列的数值可用。

  OR 运算(|)组合

  A_NOCLDSTOP : 如果参数signum为SIGCHLD,则当子进程暂停时并不会通知父进程

  SA_ONESHOT/SA_RESETHAND:当调用新的信号处理函数前,将此信号处理方式改为系统预设的方式。

  SA_RESTART:被信号中断的系统调用会自行重启

  SA_NOMASK/SA_NODEFER:在处理此信号未结束前不理会此信号的再次到来。

  如果参数oldact不是NULL指针,则原来的信号处理方式会由此结构sigaction 返回。

  返回值  执行成功则返回0,如果有错误则返回-1。

  错误代码  EINVAL 参数signum 不合法, 或是企图拦截SIGKILL/SIGSTOPSIGKILL信号

  EFAULT 参数act,oldact指针地址无法存取。

  EINTR 此调用被中断

  范例  #include<unistd.h>

  #include<signal.h>

  void show_handler(struct sigaction * act)

  {

  switch (act->sa_flags)

  {

  case SIG_DFL:printf(“Default action/n”);break;

  case SIG_IGN:printf(“Ignore the signal/n”);break;

  default: printf(“0x%x/n”,act->sa_handler);

  }

  }

  main()

  {

  int i;

  struct sigaction act,oldact;

  act.sa_handler = show_handler;

  act.sa_flags = SA_ONESHOT|SA_NOMASK;

  sigaction(SIGUSR1,&act,&oldact);

  for(i=5;i<15;i++)

  {

  printf(“sa_handler of signal %2d =”.i);

  sigaction(i,NULL,&oldact);

  }

  }

  执行  sa_handler of signal 5 = Default action

  sa_handler of signal 6= Default action

  sa_handler of signal 7 = Default action

  sa_handler of signal 8 = Default action

  sa_handler of signal 9 = Default action

  sa_handler of signal 10 = 0x8048400

  sa_handler of signal 11 = Default action

  sa_handler of signal 12 = Default action

  sa_handler of signal 13 = Default action

  sa_handler of signal 14 = Default action

  sigaddset(增加一个信号至信号集)

  相关函数  sigemptyset,sigfillset,sigdelset,sigismember

  表头文件  #include<signal.h>

  定义函数  int sigaddset(sigset_t *set,int signum);

  函数说明  sigaddset()用来将参数signum 代表的信号加入至参数set 信号集里。

  返回值  执行成功则返回0,如果有错误则返回-1。

  错误代码  EFAULT 参数set指针地址无法存取

  EINVAL 参数signum非合法的信号编号

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答