signal函数-hds ams 2500用户手册
10.3 signal函数
UNIX信号机制最简单的界面是signal函数。
#include <signal.h>
void (*signal (int signo, void (*func)(int))) (int);
signal.h>
返回:成功则为以前的信号处理配置,若出错则为SIG_ERR
signal函数由ANSI C定义。因为ANSI C不涉及多进程、进程组、终端I/O等,所以它对信号的定义非常含糊,以致于对UNIX系统而言几乎毫无用处。确实,ANSI C对信号的说明只用了2页,而POSIX.1的说明则用了15页。
SVR4也提供signal函数,该函数可提供老的SVR2不可靠信号语义(10.4节将说明这些老的语义)。提供此函数主要是为了向下兼容要求此老语义的应用程序,新应用程序不应使用它。4.3+BSD也提供signal函数,但是它是用sigaction函数实现的(10.14节将说明sigaction函数),所以在4.3+BSD之下使用它提供新的可靠的信号语义。在讨论sigaction函数时,提供了使用该函数的signal的一个实现。本书中的所有实例均使用程序10-12中给出的signal函数。
信号处理在操作系统中扮演着关键角色。那么,信号的种类和作用究竟是什么呢?表10-1列出了常见的信号名及其作用。func的值可以是以下几种之一:(a)常数SIG_IGN,表示忽略此信号;(b)常数SIG_DFL,表示执行系统默认动作;(c)一个函数的地址,当接到此信号后将调用此函数。值得注意的是,有两个信号SIGKILL和SIGSTOP是不能忽略的。
当我们指定一个函数地址时,这被称为捕捉此信号,而这个函数被称为信号处理程序(signal handler)或信号捕捉函数(signal-catching function)。对于如何编写这样的函数,有详细的例子和说明。您可以参考《信号处理函数解析signal sleepraise等等函数的使用》链接和《Linux信号signal处理机制》链接,这两篇文章提供了更深入的解释和实例代码。
进一步的信号处理技术和应用,比如通信信号处理,可以在《通信信号处理Signal Processing for Communications》链接中找到,详细介绍了信号处理在通信中的应用。对于那些喜欢动手实践的读者,建议查看《3.3.3加信号Signal处理.pdf》链接,该文档包含了丰富的实例和代码,帮助您更好地理解信号处理。
是不是已经感受到信号处理的魔力了?它不仅仅是代码和函数,更是操作系统与应用程序间的一种互动方式。继续探索吧,信号处理的世界充满了惊喜和挑战!