简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:理解signal信号应用实例。
signal函数用于设置信号处理程序。信号是在程序执行期间由操作系统或其他进程发送给进程的一种通信机制。signal函数允许我们指定在接收到特定信号时要执行的处理程序。
signal函数的原型如下:
其中,signum参数表示要处理的信号的编号,handler参数是一个指向信号处理程序的函数指针。
signal函数的返回值是一个指向以前信号处理程序的函数指针。如果返回值是SIG_ERR,则表示设置信号处理程序失败。
2.应用实例
<1>v1.0 监控Ctrl + C信号
#include <iostream>
#include <stdlib.h>
#include <csignal>
#include <unistd.h>
void sigint_handler(int signal){
std::cout << "Received SIGINT signal" << std::endl;
// 可以在这里进行一些自定义的操作或采取适当的措施
exit(0);
}
int main(){
//注册SIGINT信号处理函数(处理Ctrl + C信号.)
signal(SIGINT, sigint_handler);
std::cout << "Press Ctrl+C to send SIGINT signal..." << std::endl;
//无限循环,等待SIGINT信号的发生
while (true){
sleep(1);
}
return 0;
}
<2>v1.0 监控Ctrl + D信号
#include <iostream>
int main() {
std::cout << "Press Ctrl+D (EOF) to end input..." << std::endl;
while (true) {
int input;
std::cin >> input;
if (std::cin.eof()) {
std::cout << "Received EOF signal" << std::endl;
break;
}
}
return 0;
}
std::cin()
函数读取输入流并检查std::cin.eof()
,我们能够正确地捕获Ctrl+D(SIGQUIT)信号并退出程序。