首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux C 編程:alarm 簡易鬧鐘函數與 SIGALRM 應用

     編輯:關於C語言

alarm 基本行為

unsigned alarm(unsigned seconds);
  • 安排 seconds 秒後傳送 SIGALRM 給目前進程
  • seconds=0:取消先前鬧鐘,傳回剩餘秒數
  • 每個進程僅能有一個鬧鐘,新呼叫覆蓋舊設定
  • 傳回值:先前鬧鐘剩餘秒數 (無則 0)

進程收到 SIGALRM 後

  • 若未捕捉/忽略 → 預設終止進程
  • 若註冊處理函數 → 執行處理函數,返回後繼續原程式碼

範例:每秒自動重設鬧鐘

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

void handler(int sig) {
    puts("Get SIGALRM");
    alarm(1);  // 重新設定 1 秒
}

int main(void) {
    signal(SIGALRM, handler);
    alarm(4);  // 首次 4 秒
    while (1) pause();
    return 0;
}

首次 4 秒後觸發,處理函數再設 1 秒,形成週期性觸發。比 setitimer 簡單但精度僅秒級,無法設定微秒間隔。

alarm vs setitimer

特性alarmsetitimer
精度秒微秒
週期性需自行重設內建 it_interval
計時模式僅真實時間三種模式
可攜性POSIX.1POSIX.1
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved