多路复用 select、poll、epoll

1321阅读 0评论2012-07-02 glinuxi
分类:C/C++

     在C/S模型中服务器端需要同时处理多个客户端的连接请求,此时就需要使用多路复用
函数:int select(int n,fd_set *readfds,fd_set *writefds,fd_set *exceptfd,struct timeval to)
   
  • n #  是需要监视的文件描述符数,要监视的文件描述符值为0-------n-1
  • readfds 指定需要监视的可读文件描述符的集合,当这个集合中的一个描述符上有数据到达时,系统将通知调用select函数的程序。
  • writefds 指定需要监视饿可写文件描述符的集合,当这个集合中某个描述符可以发送数据时,程序将收到通知
  • exceptfd 是需要监视的异常文件描述符集合,当该集合中的一个描述符发生异常时,程序将收到通知
  • to指定了阻塞的时间,如果这段时间内监视的文件描述符上没有异常发生,那么select()将返回 0   
    文件描述符集合提高的宏操作 
    FD_CLR(int fd, fd_set *set)       将文件描述符fd从文件描述集合set中删除
    FD_ISSET(int fd, fd_set *set)     测试fd是否在set中
    FD_SET(int fd, fd_set *set)       在文件描述符集合中添加文件描述符fd
    FD_ZERO(fd_set *set)              将文件描述符集合中set清空      

函数:int poll(struct pollfd fds[], nfds_t nfds, int timeout)
      poll()函数是某些unix系统提供的用于执行与select()函数同等功能的函数,但是效率比select()函
      数高
函数  epoll 是LINUX内核为处理大批量句柄而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著程序程序在大量并发连接中只有少量活跃的情况下的系统cpu利用率。
        epoll的使用: http://blog.csdn.net/ljx0305/article/details/4065058

上一篇:野指针
下一篇:探讨C语言中的回调函数