• 关于信号打断正在读取终端的read与select来监视0文件描述符的问题


    首先说一下对于这个问题外的一些话:

                    我觉得我们应该有种质疑的态度,因为接下来的这个问题就和我们平常所想的不一样。

    介绍一下问题:

          曾经一直听说信号可以打断一个正在阻塞的进程,但是今天我试了一下关于信号打断阻塞在终端的问题,

    代码:

      

    int main(int argc, char** atgv) {
     18    
     19     signal(SIGALRM,fun);
     20     alarm(2);
     21     char buf[1024];
     22     read(0,buf,100);
     23    /* fd_set readfd;
     24     FD_ZERO(&readfd);
     25     FD_SET(0,&readfd);
     26     int rec=select(1,&readfd,NULL,NULL,NULL);
     27     printf("%d
    ",rec);
     28     if(errno==EINTR)
     29     {
     30         printf("我被打断了
    ");
     31 
     32 
     33     }*/
     34 
     35     // printf("%d
    ",a);
     36     return 0;
     37 }

    结果是:用alarm信号打断read时候信号处理函数被执行了可是我们的read仍在阻塞这个问题我目前深受质疑,也不能解答,但是我通过select来关注0文件描述符他会被打断的应执行打印我被打断

    我的设想:可能是系统版本的原因,希望高人可以指点。

  • 相关阅读:
    Java方法_数组
    Java语句
    C#死锁示例
    Sqlserver限制用户访问指定数据库
    Stream 和 byte[] 之间的转换
    ContentType
    IIS7多站点ssl配置及http自动跳转到https
    google map api key配置
    remote: Incorrect username or password ( access token ) fatal: Authentication failed for
    IIS 404设置
  • 原文地址:https://www.cnblogs.com/jzlzn/p/10449073.html
Copyright © 2020-2023  润新知