[英]learning POSIX signals using sigaction
我正在嘗試使用 POSIX sigaction function 來學習信號。
我想要做的是提示用戶輸入。 提示后,設置 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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.