上一节介绍进程间通信方式之一信号通信中的信号产生和捕捉函数,这一节介绍信号处理函数signal()函 数和信号集函数组,接上一节http://blog.csdn.net/mybelief321/article/details/9078193
强烈建 议做最后一个实验!
信号处理方法
信号处理的方法主要有以下两种:
① 使用 signal() 函数;
② 使用信号集函数组。
使用signal()函数
函数说明
使 用signal()函数处理时,只需指出要处理的信号和处理函数即可。它主要用于前32种非实时信号的处理,不支 持信号传递信息。Linux还支持一个更健壮更新的信号处理函数呢,它就是 sigaction(),推荐使用这个函数 。
函数格式
这里 signal() 这个函数的原型我当时看了头有点大,还是先说明一下:首先该函数原型整体指向一个无 返回值并且带一个整形参数的函数指针,也就是信号的原始配置函数;接着该原型又带有两个参数,其中第2 个参数可以是用户自定义的信号处理函数的函数指针。不明白也没事,后边做实验就明白了,会用就行了。
这里要说明的是 sigaction()函数中第2个和第3个参数用到的 sigaction 结构,下表为 siaction的定义 :
sa_handler 是一个函数指针,指定信号处理函数,这里除可以是咱们自定义的处理函数外,还可以为 SIG_DFL(采用默认的处理方式)或SIG_IGN(忽略信号)。它的处理函数只有一个参数,即信号值。
sa_mask 是一个信号集,它可以指定在信号处理程序执行过程中哪些信号应当被屏蔽,在调用信号捕 获函数前,该信号集要加入到信号的信号屏蔽字中。
sa_flags 中包含了很多标志位,是对信号进行处 理的各个选择项。它的常见可选值如下表所示: