POSIX sigaction 기능을 사용하여 신호를 학습하려고합니다.sigaction을 사용하여 POSIX 신호를 학습하십시오.
사용자가 입력하라는 메시지가 표시됩니다. 프롬프트 후에 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'을 사용합니다. – user786653
고맙습니다, user786653. – user695752