prev up next   top/contents search

comp.lang.c FAQ 列表· 第19.38题

如何捕获或忽略键盘中断,如 Ctrl-C?


基本步骤是调用signal函数,例如

	#include <signal.h>
	signal(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 系统中,setcbrkctrlbrk函数也可能涉及。

参考: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


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管