unix環境高階程式設計讀書筆記 關於訊號的理解

2021-06-18 08:36:38 字數 1050 閱讀 9591

書中程式清單:10-15.c

#include "apue.h"

static void sig_int(int signo);

int main(void)

sigemptyset(&newmask);

sigaddset(&newmask, sigint);

if(sigprocmask(sig_block, &newmask, &oldmask) < 0)

pr_mask("critical region: ");

sigemptyset(&waitmask);

sigaddset(&waitmask, sigusr1);

if(sigsuspend(&waitmask) != -1)

pr_mask("after sigsuspend: ");

if(sigprocmask(sig_setmask, &oldmask, null) < 0)

pr_mask("program exit: ");

exit(0);

}static void sig_int(int signo)

輸出如下:

$./a.out

program start:

critical region: siginit

^cin sig_int: siginit sigusr1

after sigsuspend: siginit

program exit:

$

剛開始時,我很不理解為甚麼在sig_int中,會輸出sigint,以為sigint已經被遮蔽(sigsuspend替換了遮蔽字,而該遮蔽字中,並沒有sigint),後來仔細看了書,原來是,在訊號處理程式中,會自動把該訊號加入當前程序的遮蔽字中。對於遮蔽訊號,樹種說的很清楚,是阻塞該訊號,暫時不傳送給程序。解除阻塞後,立即傳送給程序。我做了實驗,的確是這樣。對於sigsuspend,書中說的很清楚,是替換當前遮蔽字,我也做了實驗,的確是這樣。

unix 環境高階程式設計 讀書筆記

unix環境高階程式設計 讀書筆記 第8章exit和 exit區別 exit會直接進入核心,不會關閉io流。程序基本控制函式還有 wait,fork,exec。atexit 程式正常退出時呼叫,如果因為signal退出則不能呼叫。功能 註冊函式可以完成一些清理工作,比如全域性log類,可以不設定析構...

unix環境高階程式設計 讀書筆記

檔案 unix支援在不同程序之間共享開啟的檔案。核心使用三種資料結構表示開啟的檔案 原子操作 一般而言,原子操作指的是由多步組成的操作。如果該操作原子的執行,要麼執行完所有步,要麼一步也不執行,不可能只執行所有步驟的乙個子集。2 注意 原子操作函式 pread,pwrite pread 相當於呼叫r...

Unix環境高階程式設計 讀書筆記一

unix 基礎知識 這一章主要是unix系統的概論以及一些概念的介紹,主要分為10個小節 1 登陸 2 檔案和目錄 3 輸入和輸出 4 程式和程序 5 ansi c 6 出錯處理 7 使用者標識 8 訊號 9 unix時間值 10 系統呼叫和庫函式 這個都比較簡單,就不再重複敘述了。在標頭檔案中定義...