UNIX/LINUX 单线程I/O 超时处理


  UNIX 下的I/O 超时处理是一个很常见的问题,  它的通常做法是接收输入(或发送输出)后立刻返回,  如
果无输入(或输出)则n 秒后定时返回. 
   一般情况下,  处理UNIX中I/O 超时的方式有终端方式,  信号跳转方式和多路复用方式等三种.  本节设
计一个定时I/O 的例子,  它从文件描述符0 中读取一个字符,  当有输入时继续,  或者3 秒钟后超时退出, 并打
印超时信息. 
  (1) 终端I/O 超时方式 
   利用ioctl 函数,  设置文件描述符对应的标准输入文件属性为” 接收输入后立刻返回,  如无输入则3 秒后
定时返回. 


#include <unistd.h> 
#include <termio.h> 
#include <fcntl.h> 
  
int main() 
{ 
        struct termio old, new; 
        char c = 0; 
  
        ioctl(0, TCGETA, &old); 
 
        new = old; 
        new.c_lflag &= ~ICANON; 
        new.c_cc[VMIN] = 0; 
        new.c_cc[VTIME] = 30;         //  设置文件的超时时间为 3 秒 
        ioctl(0, TCSETA, &new); 
        if((read(0, &c, 1)) != 1) 
                printf("timeout\n"); 
        else 
                printf("\n%d\n", c); 
        ioctl(0, TCSETA, &old); 
  
        return 0; 
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值