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

Linux C 系統編程:信號與定時器實戰

     編輯:關於C

核心代碼示例

#include 
#include 

void do_alarm(int num);

int main() {
    // 註冊 SIGALRM 處理函數
    if (signal(SIGALRM, do_alarm) == SIG_ERR) {
        perror("register alarm fail");
        return -1;
    }
    // 3 秒後發送 SIGALRM(一次性)
    alarm(3);
    while (1) {
        printf("this is in main...\n");
        sleep(3);
    }
    return 0;
}

void do_alarm(int num) {
    printf("this is in alarm ... &&\n");
    // 重置定時器為 1 秒(演示重複觸發)
    alarm(1);
}

運行輸出

this is in main...
this is in alarm ... &&
this is in main...
this is in alarm ... &&
this is in main...
this is in alarm ... &&
...

關鍵點解析

  • signal(sig, handler):註冊信號處理方式。SIG_ERR 表示失敗。信號列表可用 kill -l 查看(共 64 個)。
  • alarm(seconds):設置秒數後發送 SIGALRM。進程僅能有一個鬧鐘,再次調用覆蓋舊值。alarm(0) 取消鬧鐘並返回剩餘秒數。
  • 信號處理函數中調用 alarm 可實現周期性定時器(類似單片機定時中斷)。
  • 注意:sleep 可能被信號中斷提前返回,實際項目中需處理 EINTR 重試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved