加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux系统文件I/O编程(三) I/O多路复用

发布时间:2016-01-19 08:02:32 所属栏目:Linux 来源:网络整理
导读:多路复用 函数说明 我们都知道fcntl()函数解决了文件共享的问题,如果不知道请看: http://blog.csdn.net/mybelief321/article/details/8993138。接下来该处理I

可以看到,这个时间结构体的精确度可以设 置到微秒级,这对于大多数的应用而言已经足够了。

使用select()函数的过程可概括为:先调用 FD_ZERO() 将指定的fd_set清零,然后调用宏FD_SET()将需要测试的fd加入fd_set,接着调用函数select测试 fd_set中的所有fd,最后用用宏FD_ISSET()检查某个fd在函数select调用后,相应位是否仍然为1。在执行完 对相关文件描述符的操作后,使用FD_CLR来描述符集。

下表为 poll()函数的介绍:

Linux系统文件I/O编程(三) I/O多路复用

基础实验

实验原理

本实验主 要实现通过调用poll()函数来监听三个终端的输入(分别重定向到两个管道文件的虚拟终端及主程序所运行的 虚拟终端)并分别进行相应的处理。在这里我们建立了一个poll()函数监听的读文件描述符集,其中包含三个 文件描述符,分别为标准输入文件描述符和两个管道文件描述符。通过监视主程序的虚拟终端标准输入来实现 程序的控制(如程序结束);以两个管道作为数据输入,主程序将从两个管道读取的输入字符串写入到标准输 出文件(屏幕)。

为了充分表现poll()函数的功能,在运行主程序时,需要打开3个虚拟终端:首先 用mknod命令创建两个管道 in1 和 in2。接下来,在两个虚拟终端上分别运行 cat > in1和cat > in2. 同时在第三个虚拟终端上运行主程序。

在程序运行后,如果在两个管道终端上输入字符串,则可以观 察到同样的内容将在主程序的虚拟终端上逐行显示。

如果想结束主程序,只要在主程序的虚拟终端下 输入以“q”或“Q”字符开头的字符串即可。如果三个文件一直在无输入状态张,则主程序一直处于阻塞状态 。为了防止无限期的阻塞,在程序中设置超时值(本实验汇总设置为60s),当无输入状态持续到超时值时, 主程序主动结束运行并退出。

程序的流程图如下:

Linux系统文件I/O编程(三) I/O多路复用

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读