• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
我的人生我来写
博客园    首页    新随笔    联系   管理    订阅  订阅

关于信号打断正在读取终端的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\n",rec);
 28     if(errno==EINTR)
 29     {
 30         printf("我被打断了\n");
 31 
 32 
 33     }*/
 34 
 35     // printf("%d\n",a);
 36     return 0;
 37 }

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

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

posted @ 2019-02-28 11:07  我的人生我来写  阅读(284)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3