共计 912 个字符,预计需要花费 3 分钟才能阅读完成。
最近再看 unix 编程的书籍,理解下操作系统。对于 sinal 信号的毛病的形容有一些似懂非懂的中央,就依照例子做一个试验,看看零碎如何解决。代码如下:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#define INPUTLEN 100
void inthandler(int s){printf("received a signal %d\n",s);
sleep(2);
printf("leaving inthandler\n");
}
void quithandler(int s){printf("received a signal %d\n",s);
sleep(3);
printf("leaving quithandler\n");
}
int main(int ac,char *av[]){char input[INPUTLEN];
int nchars;
signal(SIGINT,inthandler);
signal(SIGQUIT,quithandler);
do{printf("\n type a message\n");
nchars=read(0,input,(INPUTLEN-1));
if(nchars==-1)
perror("read return an error");
else{input[nchars]='\0';
printf("you typed ,%s",input);
}
}while(strncmp(input,"quit",4)!=0);
}
测试场景(在 centos7 零碎下测试):
- 间断屡次中断信号
通过上图的演示,在收回第一个中断信号后,捕捉信号处理。在屡次收回终端信号后,信号被阻塞,信号处理程序处理实现后,梗塞的雷同的信号被捕捉一次。
2. 距离发送中断信号和 QUIT 信号
发送一个中断信号后,零碎捕捉信号处理。在收回一个 QUIT 信号后,从中断信号处理的函数跳转导 QUIT 信号处理函数解决。
3、被中断的零碎调用
当输出“hello”后产生了中断,中断实现后输出“world n”, 最初只打印出 “world”. 看来在 centos,并不是在 read 时产生中断返回 -1.
正文完