1、不要使用低级的或者STDIOH的IO函数
2、不要使用对 *** 作
3、不要进行系统调用
4、不是浮点信号的时候不要用longjmp
5、signal函数是由ISO C定义的。因为ISO C不涉及多进程,进程组以及终端I/O等,所以他对信号的定义非常含糊,以至于对UNIX系统而言几乎毫无用处。
备注:因为signal的语义与现实有关,所以最好使用sigaction函数替代本函数。
signal(SIGALRM, alarmhandle); 表示给当前进程注册SIGALRM信号处理代码,如果收到SIGALRM信号,就会去执行alarmhandle函数
$ man signalSYNOPSIS
#include <signalh>
typedef void (sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
DESCRIPTION
The signal() system call installs a new signal handler for the signal with number signum The signal handler is set to sighandler which may be a user specified function, or either SIG_IGN or SIG_DFL
signal()函数是个系统调用,该函数按signum设定一个新的信号处理句柄(函数)新设定的处理函数可以是用户自定义的函数,也可以是系统指定的SIG_IGN 或 SIG_DFL
参考代码:
#include <signalh>#include <unistdh>
#include <stdioh>
#include <stdlibh>
void alarmhandle(int sig)
{
printf("recv sig:%d\n", sig );
printf("exit!\n");
exit(0);
}
int main()
{
signal( SIGALRM, alarmhandle );
printf("begin\n");
alarm(5); //定时器,用于在5秒后产生SIGALRM信号
while( 1 );
return 0;
}
运行结果:
begin
recv sig:14
exit!
void (handler)(int);
//函数指针,指针名为handler。
//指向一类这样的函数:
函数返回值为void(无)
函数有一个入参,参数类型是int
调用的时候第二个参数直接写上你的槽函数名字就可以了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)