在Linux下打开两个shell命令行环境,这里分别称之为shell_env_1和shell_env_2。
在shell_env_1和shell_env_2中各执行一下命令tty,得到两个shell环境各自对应的终端设备文件的完整路径,这里分别用tty_dev_1和tty_dev2表示。
在如下程序中增加针对信号SIGINT的处理代码,然后在shell_env_1中编译运行此程序。
使得此程序在运行后,用户需要在shell_env_1中连按5次CTRL+C才能使之退出。
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <ucontext.h>
int main(int argc, char *argv[])
{
while (1)
{
printf(".");
fflush(stdout);
sleep(1);
}
return 0;
}
修改后 在终端中按5次ctl+c 才会退出程序:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <ucontext.h>
#define SIGINTCOUNT (int)3
int main(int argc, char *argv[])
{
int i=0;
void SignCapture(int iSignNo)
{
if (i<SIGINTCOUNT)
{
i++;
}
else
{
signal(SIGINT,SIG_DFL);
}
}
signal(SIGINT,SignCapture); /*捕获ctrl+c信号后进入SignCapture()函数进行处理*/
while (1)
{
printf(".");
fflush(stdout);
sleep(1);
}
return 0;
}