gpt4 book ai didi

c - 使用 sigaction 学习 POSIX 信号

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:17 26 4
gpt4 key购买 nike

我正在尝试使用 POSIX sigaction 函数学习信号。

我想做的是提示用户输入。提示后,设置 5 秒警报。如果用户在警报到期之前没有输入任何内容,则会重新提示用户。如果用户确实输入了某些内容,警报将被取消并且输入会被回显。如果第三次重新提示后没有输入,则程序退出。

以下是我目前所拥有的。它的作用是,在第一次显示提示后,当没有输入任何输入时,它会退出并显示消息“报警信号”。

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <time.h>
#include <signal.h>

volatile sig_atomic_t count = 0;

void sighandler(int signo)
{
++count;
}

int main(void)
{
char buf[10];
struct sigaction act;
act.sa_handler = sighandler;

sigemptyset(&act.sa_mask);

act.sa_flags = 0;

if(sigaction(SIGINT, &act, 0) == -1)
{
perror("sigaction");
}

while(count < 3)
{
printf("Input please: ");

alarm(5);

if(fgets(buf, 10, stdin))
{
alarm(0);
printf("%s", buf);
}
}

return 0;
}

最佳答案

您正在为 SIGINT 而不是 SIGALRM 注册您的处理程序。因此,当警报确实到达时,它不会被捕获,因此根据默认配置,该过程将终止。

作为旁注,您也可以为此使用select

关于c - 使用 sigaction 学习 POSIX 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083605/

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