您的位置:首页 > 运维架构 > Linux

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

2012-12-20 16:45 218 查看
  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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: