Linux的多路复用

多路复用,是一种机制,通过该机制可以监视多个描述符,内核一旦发现进程指定的一个或多个IO条件准备读取,就会通知该进程,就会准备好相应的I/O操作。

相比较于多进程和多线程,多路复用的优势在于系统开销小,因为系统不必创建进程或线程,因而也不必维护这些进程或线程,从而大大减少了系统的开销。

它适用的场合有:

(1)当用户处理多个描述字时,必须使用I/O复用;

(2)当一个客户同时处理多个套接口的时候,好在这种情况出现的可能性比较小。

select()函数:

头文件:#include <sys/time.h>

#include <sys/types.h>

#include <unistd.h>

原型:int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout)

功能:I/O多工机制

描述:用于等待文件描述符状态的改变,n代表最大的文件描述符加1,1;参数readfds,writefds和exceptfds称为描述符组,是用来回传该描述符的读写或例外的状况。

以下是宏提供处理这种描述符组的方式:

    FD_CLR(int fd,fd_set *set):用来清除描述符组set中相关fd的位

    FD_ISSET(int fd,fd_set *set):用来测试描述符组set中相关fd的位是否为真

    FD_SET(int fd,fd_sets *set):用来设置描述符组set的全部位

    FD_ZERO(fd_set *set):用来清除描述符组set的全部位

参数timeout为结构timeval,用来设置select()的等待时间,其结构定义如下:

struct timeval

{

  time_t tv_sec;

  time_t tv_usec;

 };

如果参数timeout设为NULL则表示select()没有timeout.

返回值:执行成功,则返回文件描述符状态已经改变的个数,如果返回0代表着在描述符状态改变之前已经超过timeout的时间,当有错误发生的时候则返回-1,并将错误的原因保存在errno中,而此时参数readfds,writefds,exceptfds和timeout的值就变得不可预测。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值