C语言标准库signal.h是C语言中处理信号的头文件,它用来定义信号的类型、定义信号处理函数的原型,以及提供信号控制函数。
signal.h的基本用法
signal.h中定义的函数有:signal()、raise()、kill()、sigaction()等。其中signal()函数的原型为:
void (*signal(int signo, void (*func)(int)))(int);
该函数用来设定信号signo的处理函数为func,如果func为SIG_IGN,则表示忽略该信号;如果func为SIG_DFL,则表示恢复该信号的默认处理动作。signal()函数返回原来的信号处理函数指针。
raise()函数的原型为:
int raise(int signo);
该函数用来向调用进程发送信号signo,如果调用进程有处理该信号的处理函数,则调用该处理函数,否则,根据该信号的默认处理动作,对调用进程进行处理。raise()函数返回0表示成功,返回-1表示失败。
kill()函数的原型为:
int kill(pid_t pid, int sig);
该函数用来向进程pid发送信号sig,如果进程pid有处理该信号的处理函数,则调用该处理函数,否则,根据该信号的默认处理动作,对进程pid进行处理。kill()函数返回0表示成功,返回-1表示失败。
sigaction()函数的原型为:
int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);
该函数用来设定信号signo的处理函数为act指向的结构体sigaction中的sa_handler成员,如果act为NULL,则表示忽略该信号;如果act中的sa_handler成员为SIG_DFL,则表示恢复该信号的默认处理动作。sigaction()函数返回0表示成功,返回-1表示失败。
signal.h的应用实例
下面是一个使用signal.h头文件处理信号的示例:
#include#include void sig_handler(int signo) { if (signo == SIGINT) printf("received SIGINT\n"); } int main(void) { if (signal(SIGINT, sig_handler) == SIG_ERR) { printf("\ncan't catch SIGINT\n"); } while(1) sleep(1); return 0; }
上面的示例中,使用signal()函数将SIGINT信号的处理函数设置为sig_handler()函数,当接收到SIGINT信号时,就会调用sig_handler()函数,从而处理SIGINT信号。
signal.h是C语言中处理信号的头文件,它提供了signal()、raise()、kill()、sigaction()等函数,可以用来设定信号的处理函数,以及向进程发送信号,用于信号处理的应用中,signal.h是必不可少的。