在有或没有sigsetjmp的情况下使用sigaction

时间:2015-12-10 18:15:55

标签: c signals sigaction

我有一个练习,我必须实现一个函数,它将一个参数函数指针<div class="tree-without-leaves"> <div class="tree-with-leaves"> </div> </div> <button>Click Me</button>作为参数,一个参数指向所述指针fun指向的函数和一个整数{ {1}}。如果参数在parameter秒之前终止,则函数period的执行指向fun时,此函数将返回1,否则返回0。

这两种解决方案是否相同?

parameter

period

我会说是,但我想澄清我可能有的任何疑问。

1 个答案:

答案 0 :(得分:1)

这些不一样。

在第一个示例中,如果触发警报,fun由于调用siglongjmp而无法正常退出。在第二个示例中,警报将设置返回值的标志,但fun将继续运行完成。

另外,你有一个错误:

  if(sigsetjmp(env,1) == 0) 
    fun(parameter);
    sigaction(SIGALRM, &old, NULL);
  else
    return 0
  return 1;

您在ifelse区块周围缺少大括号,在第一个;之后错过了return。另外,我相信你根据对函数应该做什么的描述来混合返回值。

固定代码:

  if(sigsetjmp(env,1) == 0) {
    fun(parameter);
    sigaction(SIGALRM, &old, NULL);
  } else {
    return 1;
  }
  return 0;