华清远见嵌入式学习day21——IO多路复用

【1】IO多路复用

基本思想:
    1. 创建一个关于文件描述符的表、集合;
        fd_set readfds;
    2. 要把你关心的文件描述符加入到表或集合当中;
        0  fd=open() sockfd acceptfd
    3. 调用具体函数select/poll,来监听具体有哪个或者多个文件描述符产生了事件;
        如何有一个或者多个文件描述符产生了事件,那么函数返回;
    4. 轮询判断具体是哪个文件描述符产生了事件;
        if      for()
    5. 根据文件描述符来操作逻辑;

    select(); 
    把产生事件以外的文件描述符全部置0;
    
【2】select
NAME
       select,  pselect,  FD_CLR,  FD_ISSET, FD_SET, FD_ZERO - synchronous I/O
       multiplexing
SYNOPSIS
       /* According to POSIX.1-2001 */
       #include <sys/select.h>

       /* According to earlier standards */
       #include <sys/time.h>
       #include <sys/types.h>
       #include <unistd.h>

       int select(int maxfd, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);    
        参数:
            maxfd: 我们要监听最大文件描述符+1(文件描述符的个数)
            readfds:    读集合
            writefds:   写集合
            exceptfds:  异常集合
            timeout:    超时时间
                如果填NULL,返回值: -1  出错
                                     >0  表示有多个事件产生
                如果设置timeval  返回值:
                                    -1 出错
                                    =0 时间到了,没有事件产生
                                    >0 一个或多个文件描述符产生了事件
            struct timeval {
               long    tv_sec;         /* seconds */
               long    tv_usec;        /* microseconds */
            };
            
            struct timeval tv = {
                .tv_sec = 1,
                .tv_usec = 0,
            };
            struct timeval tv = {1,0};
            
                         
    需求:想监听数据是从键盘来的,还是从鼠标来的数据;
                          0               /dev/input/mouse1
    大家的鼠标可能不是mouse1,要自己测试一下;
       void FD_CLR(int fd, fd_set *set);    // 清集合当中的某一位
       int  FD_ISSET(int fd, fd_set *set);  // 判断fd是否在集合当中
       void FD_SET(int fd, fd_set *set);    // 把fd加入到集合当中
       void FD_ZERO(fd_set *set);            // 清空集合
       
    
    需求: 想监听标准输入0,还想监听sockfd; 
    
  
    
    
    
    

猜你喜欢

转载自blog.csdn.net/UemTuBXuR/article/details/89172967