Linux中的函数select和poll用来支持I/O复用的功能,在Linux中I/O模型可以分为以一几种:(引用叶剑峰)
(1)阻塞I/O
这个模型也是最容易理解的
程序调用和我们基本的程序编写是一致的:
fd = connect()
write(fd)
read(fd)
close(fd)
程序的read必须在write之后执行,当write阻塞住了,read就不能执行下去
(2)非阻塞I/O
从图中可以看出来,这是一个轮询的过程
每次用户询问内核是否有数据报准备好(文件描述符缓冲区是否就绪),当数据报准备好的时候,就进行拷贝数据报的操作。当数据报没有准备好的
时候,也不阻塞程序,内核直接返回未准备就绪的信号,等待用户程序的下一次轮询。
设置非阻塞io:
#include <fcntl.h>
int fcntl(int fd, int cmd, .. /* int arg */)