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;
}
果无输入(或输出)则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;
}
相关文章推荐
- 字符及文本处理之正则表达式:Linux/Unix工具与正则表达式的POSIX规范
- unix/linux下线程私有数据实现原理及使用方法
- shell脚本兼容linux/unix与windows/cygwin的基础(注意处理好CR, LF, CR/LF 回车 换行的问题)
- shell脚本兼容linux/unix与windows/cygwin的基础(注意处理好CR, LF, CR/LF 回车 换行的问题)
- Linux学习之出错处理(线程安全的日志类封装)
- Unix/Linux IPC及线程间通信总结
- unix/linux下线程私有数据实现原理及使用方法
- Linux/UNIX不同shell环境下数组的处理
- 如何在linux/unix中设置线程的优先级
- Unix/Linux IPC及线程间通信总结
- 使用Linux的Shell脚本定时处理MySQL超时
- Linux登录超时自动退出处理办法
- [转] unix/linux下线程私有数据实现原理及使用方法
- 系统设计之 unix/linux 线程(一)
- Unix/Linux下的Curses库开发指南——第二章 curses库I/O处理
- 线程执行超时处理、并发线程数控制
- Linux线程的实现 & LinuxThread vs. NPTL & 用户级内核级线程 & 线程与信号处理
- 处理远程登录到linux/unix下退格键显示为^H方法
- Unix/linux进程及线程间同步技术总结【学习总结,请勿吐槽。。。】
- Linux/Unix系统SSH远程按Backspace键删除时出现^H的处理方法