从初识Linux到离不开系列(五)踏阶而上

来源:互联网 发布:无锡网络推广技巧 编辑:程序博客网 时间:2024/06/09 19:19

I/O复用_浅谈

I/O复用目录

  • I/O模型
  • select函数
  • shutdown函数
  • pselect函数
  • poll函数

I/O模型

Unix的5种I/O模型

阻塞式I/O
非阻塞式I/O
I/O复用
信号驱动式I/O(SIGIO)
异步I/O(POSIX aio_系列函数)

    前四种模型都是同步I/O,真正的I/O操作——recvfrom将进程阻塞。

select函数

select函数定义和使用方法

   select(),确定一个或多个套接口的状态,本函数用于确定一个或多个套接口的状态,对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息,用fd_set结构来表示一组等待检查的套接口,在调用返回时,这个结构存有满足一定条件的套接口组的子集,并且select()返回满足条件的套接口的数目。——出自百度百科(维基百科加载不出来)
    select函数在 sys/select.h 中有相关定义

shutdown函数

shutdown与close区别
close限制
描述符的引用计数减1
终止读和写两个方向
shutdown
避免close的限制

pselect函数

pselec()用来等待文件描述词状态的改变,和select()类似,它增加了超时值的精度,并且可以在等待文件描述符“准备好”的同时指定一组信号掩码。

定义在 sys/select.h
int pselect(int maxfdp1,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,const struct timespec *tsptr,const sigset_t *sigmask);
返回值:准备就绪的描述符数,若超时则返回0,若出错则返回-1

poll函数

poll,Linux中的字符设备驱动中有一个函数,Linux 2.5.44版本后被epoll取代。
一说起这个设备驱动,就仿佛打了鸡血一样!!!

此函数在系统调用select内部被使用,作用是把当前的文件指针挂到设备内部定义的等待

功能和select差不多,因为起初是在处理流设备,所以实现起来看着就很亲切。

poll()接受一个指向结构’struct pollfd’列表的指针,其中包括了你想测试的文件描述符和事件。

struct pollfd {
int fd; /文件描述符/
short events; /* 等待的需要测试事件 */
short revents; /* 实际发生了的事件,也就是返回结果 */
};

虽然没写多少内容,但是真的是用了很多时间来看,只能说这个理解能力和实践结合的不够完美。
0 0
原创粉丝点击