面试题答案
一键面试#include <stdio.h>
#include <signal.h>
#include <unistd.h>
// 信号处理函数
void sigint_handler(int signum) {
printf("捕获到SIGINT信号,程序即将退出。\n");
// 在此处可以进行一些清理工作
}
int main() {
// 注册信号处理函数
if (signal(SIGINT, sigint_handler) == SIG_ERR) {
perror("signal");
return 1;
}
printf("程序运行中,按Ctrl+C发送SIGINT信号...\n");
while (1) {
sleep(1);
}
return 0;
}
信号处理函数的作用
信号处理函数sigint_handler
用于在程序捕获到指定信号(此处为SIGINT
)时执行特定的操作。在这个函数中,我们输出了一条自定义的提示信息,同时也可以在这个函数中进行资源清理、保存数据等操作,确保程序在收到信号时能够安全、有序地处理,而不是直接异常终止。
关键函数的使用
-
signal函数:
- 作用:用于注册信号处理函数。
- 原型:
void (*signal(int signum, void (*handler)(int)))(int);
- 参数:
signum
:要捕获的信号,如SIGINT
。handler
:信号处理函数的指针,这里为sigint_handler
。如果设置为SIG_IGN
,表示忽略该信号;如果设置为SIG_DFL
,表示恢复默认处理方式。
- 返回值:成功时返回之前的信号处理函数指针,失败时返回
SIG_ERR
,并设置errno
。
-
sleep函数:
- 作用:使调用进程挂起一段时间。
- 原型:
unsigned int sleep(unsigned int seconds);
- 参数:指定挂起的秒数。
- 返回值:如果剩余时间为0,返回0;如果被信号中断,返回剩余的秒数。在上述代码中,
sleep(1)
用于让主程序持续运行,以便等待信号的到来。