分享

select用法举例

 书永夜 2013-12-02
#include "common.h"

int main(void)
{

    char buf[1024];
    int fd = open("/dev/input/mice", O_RDONLY);
    ERROR(fd < 0, "open mouse", err1);

    while(1)
    {
        //创建一个文件描述符监听集
        fd_set rset;
        //清空该监听集
        FD_ZERO(&rset);
        //将你想要监听的文件描述符加入监听集
        FD_SET(0, &rset);
        FD_SET(fd, &rset);

        struct timeval tval;
        tval.tv_sec = 3;
        tval.tv_usec = 0;
        
        //返回值是当前就绪的文件描述符数量
        int res = select(fd+1, &rset, NULL, NULL, &tval);
        printf("fd=%d\tres = %d\n", fd, res);
        if(res == 0)
        {
            printf("等待超时!重来!\n");
            continue;
        }

        //查询监听集里面某个文件描述符是否就绪
        if(FD_ISSET(0, &rset))
        {
            printf("read 0\n");
            bzero(buf, 1024);
            read(0, buf, 1024);
            printf("stdin:%s\n", buf);
        }
        if(FD_ISSET(fd, &rset))
        {
            printf("read fd\n");
            bzero(buf, 1024);
            read(fd, buf, 1024);
            printf("mouse:%s\n", buf);
        }
    }

#if 0
    sigemptyset(&sigset);
    sigaddset(SIGINT, &sigset);
    sigismember
    sigprocmask
#endif
    printf("over\n");

    return 0;
err1:
    return -1;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多