signal 信号处理测试

最近再看unix编程的书籍,了解下操作系统。对于sinal信号的缺点的描述有一些似懂非懂的地方,就按照例子做一个实验,看看系统如何处理。代码如下:

#include 
#include 
#include 
#include 

#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 系统下测试):

  1. 连续多次中断信号

signal 信号处理测试_第1张图片
当输入“hello” 后发生了中断,中断完成后输入“world n",最后只打印出 "world".看来在centos,并不是在read 时发生中断返回-1.

你可能感兴趣的:(c)