【问题标题】:alarm function in unixunix中的报警功能
【发布时间】:2016-05-19 12:05:02
【问题描述】:

以下代码没有错误,但我希望它应该在“5 秒(警报功能中的参数)”后自行终止。我想我误解了警报行为。

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/signal.h>
#define endl printf("\n")
int main(int argc, char *argv[])
{
int rc;
printf("Waiting for IOs");
getchar();
rc=alarm(5);
printf("value of rc is %d", rc);
endl;
}

根据定义,闹钟功能允许我们设置一个计时器,该计时器将在未来的指定时间到期。当计时器 到期后,会生成 SIGALRM 信号。如果我们忽略或没有捕捉到这个信号,它的默认动作是终止 过程

【问题讨论】:

  • 您打印出调用alarm() 的返回值,然后您的main() 返回(没有正确的返回值...),并且您的进程在发送警报信号之前结束。

标签: c signals


【解决方案1】:

你错过了等待信号的东西,例如调用sigsupsend(2)pause(2) 作为main 的最后一条语句。您还可以使用sleep(3)poll(2) 等。或者进行一些阻塞I/O,或者进行一些冗长的计算。

另请阅读time(7)

【讨论】:

    【解决方案2】:

    我现在已经修好了,在我去 getchar() 之前我必须打电话报警,所以现在可以了。

    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<sys/signal.h>
    #define endl printf("\n")
    int main(int argc, char *argv[])
    {
    int rc;
    printf("Waiting for IOs");
    **rc=alarm(5);**
    **getchar();**
    
    printf("value of rc is %d", rc);
    endl;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多