signal的注意点

signal的注意点,第1张

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 signal

SYNOPSIS

       #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

调用的时候第二个参数直接写上你的槽函数名字就可以了。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11669695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存