簡體   English   中英

使用 sigaction 學習 POSIX 信號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM