bsd_signal函数用法详解
bsd_signal函数简介
- 头文件包含
#include <signal.h>
- 函数定义
typedef void (*sighandler_t)(int);
sighandler_t bsd_signal(int signum , sighandler_t handler );
bsd_signal函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘bsd_signal’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <signal.h>
bsd_signal函数详细描述
bsd_signal ()函数接受与signal (2)相同的参数,并执行相同的任务
两者之间的区别在于,bsd_signal ()被保证提供可靠的信号语义,即:a)当调用处理程序时,信号的处理不被重置为默认值;b)当信号处理程序执行时,信号的进一步实例的传递被阻塞;以及c)如果处理程序中断阻塞系统调用,则系统调用自动重新启动。便携应用程序不能依赖signal (2)来提供这些保证。
bsd_signal函数返回值
bsd_signal ()函数返回信号处理程序的前一个值,或者在错误时返回 SIG_ERR 。
bsd_signal函数错误码
至于signal (2)
bsd_signal函数其他说明
应避免使用bsd_signal ();改用sigaction (2)。
在现代Linux系统上,bsd_signal ()和signal (2)是等效的。但是在旧的系统上,signal (2)提供了不可靠的信号语义;详见signal (2)。
sighandler_t的使用是一个GNU扩展;只有在定义了 _GNU_SOURCE 特性测试宏的情况下才定义此类型。
评论区