signal.h
是 C 标准库中用于处理信号(signal)的头文件。在 Unix 系统中,信号是一种异步事件,可以致使进程中断正常的执行流程,从而在特定的时间点触发特殊的处理程序,实现与系统的交互和控制。
下面是完整的 signal.h
使用攻略:
signal 函数
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
signal
函数用于指定处理某个信号时的行为,对于同一个信号,只能有一个处理函数。如果同一个信号注册了多个处理函数,仅最后一个会生效。函数入参 handler
是信号处理函数的指针,如果是 SIG_IGN
表示忽略该信号,如果是 SIG_DFL
表示重置信号的默认行为。
函数返回值是一个 sighandler_t
类型的函数指针,指向原来绑定该信号的处理函数。如果某个信号已经绑定了处理函数,再次调用 signal
会覆盖原来的处理函数。
下面是一个基本的 signal
使用示例:
#include <signal.h>
#include <stdio.h>
void sigint_handle(int signum)
{
printf("Received a signal interrupt\n");
}
int main()
{
// install signal handler
signal(SIGINT, sigint_handle);
// loop forever
while (1);
}
这段代码中,当程序执行到 signal(SIGINT, sigint_handle)
时,表示捕捉到了 SIGINT
信号并处理。此时程序会调用 sigint_handle
函数,输出 "Received a signal interrupt" 字符串,并继续执行下一步指令。由于 sigint_handle
函数没有做实质性的工作,因此该程序会继续无限循环,等待用户输入 Ctrl+C
终止程序。
raise 函数
#include <signal.h>
int raise(int sig);
raise
函数用于发送一个特定的信号到当前进程中,即程序自身发送信号到自身。函数入参 sig
指定了信号的编号,其有效值为 SIGINT
、SIGTERM
、SIGHUP
等程序所支持的信号编号。
下面是一个简单的 raise
使用示例:
#include <signal.h>
#include <stdio.h>
void sighup_handle(int signum)
{
printf("Received a SIGHUP signal %d\n", signum);
}
int main()
{
// install signal handler
signal(SIGHUP, sighup_handle);
// wait for signal
while (1);
}
这段代码中,当程序执行到 signal(SIGHUP, sighup_handle)
时,表示捕捉到了 SIGHUP
信号并处理。此时程序会调用 sighup_handle
函数,输出 "Received a SIGHUP signal" 字符串,并处于等待信号的状态。如果此时想要向程序发送 SIGHUP
信号,可以使用 Ctrl+\
的操作快捷键,也可以使用代码中的 raise(SIGHUP)
函数调用。
以上是对 signal.h
的基本用法和两个简单示例的介绍。在实际应用中,signal.h
还有其他常用的函数,如 sigaction
、sigprocmask
等,可以根据具体需求进一步了解和使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C 标准库 signal.h - Python技术站