20.37 怎樣抓獲或忽略像 control-C 這樣的鍵盤中斷?

基本步驟是調用 signal():
	#include <signal.h>
	singal(SIGINT, SIG_IGN);
就可以忽略中斷信號, 或者:
	extern void func(int);
	signal(SIGINT, func);
使程序在收到中斷信號時, 調用函數 func()。

在多任務系統下 (例如 Unix), 最好使用更加深入的技巧:

	extern void func(int);
	if(signal(SIGINT, SIG_IGN) != SIG_IGN)
	    signal(SIGINT, func);
這個測試和額外的調用可以保證前台的鍵盤中斷不會因疏忽而中斷了在後台 運行的進程, 在所有的系統中都用這種調用 signal 的方法並不會 帶來負作用。

在某些系統中, 鍵盤中斷處理也是終端輸入系統模式的功能, 參見問題 19.1。在某些系統中, 程序只有在讀入輸入時, 才查看 鍵盤中斷, 因此鍵盤中斷處理就依賴於調用的輸入例程 (以及輸入例程是否 有效)。在 MS-DOS 下, 可以使用 setcbrk() 或 ctrlbrk()。

參考資料: [ISO, Secs. 7.7,7.7.1]; [H&S, Sec. 19.6 pp. 411-3]; [PCS, Sec. 12 pp. 210-2]; [POSIX, Secs. 3.3.1,3.3.4]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)