gpt4 book ai didi

c - 简单信号 - C 编程和报警功能

转载 作者:太空狗 更新时间:2023-10-29 16:24:43 26 4
gpt4 key购买 nike

#include  <stdio.h>
#include <signal.h>


void ALARMhandler(int sig)
{
signal(SIGALRM, SIG_IGN); /* ignore this signal */
printf("Hello");
signal(SIGALRM, ALARMhandler); /* reinstall the handler */
}

int main(int argc, char *argv[])
{
alarm(2); /* set alarm clock */
while (1)
;
printf("All done");
}

我希望程序在 2 秒后打印“hello”,但输出是“zsh: alarm ./a.out”

知道发生了什么吗?

最佳答案

您忘记了最初设置警报处理程序。更改 main() 的开头,例如:

int main(int argc, char *argv[])
{
signal(SIGALRM, ALARMhandler);
...

此外,信号处理程序可能不会打印任何内容。那是因为 C 库缓存输出直到它看到行尾。所以:

void  ALARMhandler(int sig)
{
signal(SIGALRM, SIG_IGN); /* ignore this signal */
printf("Hello\n");
signal(SIGALRM, ALARMhandler); /* reinstall the handler */
}

对于真实世界的程序,从信号处理程序打印不是很安全。信号处理程序应该尽可能少地做,最好只在这里或那里设置一个标志。并且该标志应声明为 volatile

关于c - 简单信号 - C 编程和报警功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1784136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com