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

来源:互联网 发布:网络销售公司介绍 编辑:程序博客网 时间:2024/06/02 11:07

  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; }