linux系统编程:io的多路复用

1. IO多路复用
        IO多路转接

      1.  多个IO复用一个进程,不创建新进程和线程,效率高
      2.  不适合处理比较耗时的任务
      
      select
      poll
      epoll

      1. 创建文件描述符集合
      2. 添加文件描述符到集合中
      3. 通知内核开始监测
      4. 根据返回的结果做对应的操作(对io读、写操作)

select:

     void FD_CLR(int fd, fd_set *set);
       int  FD_ISSET(int fd, fd_set *set);
       void FD_SET(int fd, fd_set *set);
       void FD_ZERO(fd_set *set);

      1. 创建文件描述符集合   fd_set
      2. 添加文件描述符到集合中 void FD_SET(int fd, fd_set *set);
      3. 通知内核开始监测        select
      4. 根据返回的结果做对应的操作(对io读、写操作)
     

       int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);
       功能:监测多路IO
       参数:
                 nfds : 关注的文件描述符中的最大值+1   
                  readfds:关注的读事件的文件描述符集合
                 writefds:关注的写事件的文件描述符结合
                 exceptfds:其他  异常
                 timeout : 超时时间,如果不设置:NULL
      返回值:
              成功:返回到达事件的个数
               失败:-1
              设置了超时时间:超时时间到达但没有事件,返回0

epoll:

      1. 创建文件描述符集合                  int epoll_create(int size);
      2. 添加文件描述符到集合中           epoll_ctl()
      3. 通知内核开始监测                     epoll_wait()
      4. 根据返回的结果做对应的操作(对io读、写操作)


int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
功能:
参数:
          epfd:文件描述符集合句柄
          op: 
                   EPOLL_CTL_ADD: 向集合中添加文件描述符
                   EPOLL_CTL_MOD: 修改集合
                   EPOLL_CTL_DEL :删除文件描述符
          
          fd :操作的文件描述符
         event :文件描述符所对应的事件

int epoll_wait(int epfd, struct epoll_event *events,
                      int maxevents, int timeout);
   功能:监测IO事件
   参数:
             epfd : 文件描述符集合句柄
             events : 保存到达事件的结合的首地址
             maxevents : 监测时事件的个数
            timeout:超时时间
                           -1  :不设置超时时间

返回值:
          成功:返回到达事件的个数
          失败:-1
          设置超时:超时时间到达返回0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值