書中程式清單: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 系統呼叫和庫函式 這個都比較簡單,就不再重複敘述了。在標頭檔案中定義...