
//伪代码while(1){  read(keyboard);  printf("keyboard...");  read(mouse);  printf("mouse...");}#include #include #include #include #include #include #define pathname  "/dev/input/mice"int main(){    int fd;    int ret;    char buf[100]={0};    fd=open(pathname,O_RDWR | O_NONBLOCK);    if(fd<0)    {        perror("open failed");        return 0;    }      flag = fcntl(0, F_GETFL);    // 先获取原来的flag  flag |= O_NONBLOCK;        // 添加非阻塞属性  fcntl(0, F_SETFL, flag);    // 更新flag    while(1)    {        memset(buf,0,sizeof(buf));       ret= read(fd,buf,50);          //读鼠标    //    if(ret<0)    //    {    //        printf("read mouse ret=%d\n",ret);    //        perror("read mouse failed");    //      //  return 0;    //    }        if(ret>0)       {           printf("读出的鼠标内容是:[%s]\n",buf);       }        memset(buf,0,sizeof(buf));       ret= read(0,buf,5);          //读键盘    //    if(ret<0)    //    {    //        perror("read keyboard failed");    //        printf("read keyboard ret=%d\n",ret);    //     //   return 0;    //    }        if(ret>0)       {           printf("读出的键盘内容是:[%s]\n",buf);       }    }    return 0;}#include #include #include #include #include #include #include #include #define pathname  "/dev/input/mice"int main(void){    int ret;    int fd;    char buf[200];     struct timeval tv;      tv.tv_sec = 5;    tv.tv_usec = 0;   fd_set   myset;    fd=open(pathname,O_RDONLY);        if(fd<0)    {        perror("open mice failed");        return 0;    }   while(1)    {        FD_ZERO(&myset);        FD_SET(0, &myset);        FD_SET(fd, &myset);        ret=select(fd+1,&myset,NULL,NULL,NULL);        if(ret<0)        {            perror("select");            return 0;        }        else if(ret==0)        {            printf("time out\n");            sleep(2);        }        else        {            if( FD_ISSET(fd,&myset))            {                memset(buf,0,sizeof(buf));                read(fd,buf,5);                printf("读鼠标:[%s]\n",buf);            }           if(FD_ISSET(0,&myset))            {                memset(buf,0,sizeof(buf));                read(0,buf,5);                printf("读键盘:[%s]\n",buf);            }        }   }        return 0;}#include #include #include #include #include #include #include #define pathname  "/dev/input/mice"int main(void){    int fd;    int ret;    char buf[100];    struct pollfd   mypoll[2]={0};    fd=open(pathname,O_RDONLY);    if(fd<0)    {        perror("open failed");        return 0;    }      while(1)    {         mypoll[0].fd=0;         mypoll[0]. events=POLLIN;         mypoll[1].fd=fd;         mypoll[1]. events=POLLIN;        ret=poll(mypoll,fd+1,10000);        if(ret<0)        {            perror("poll");            return 0;        }        else if(ret==0)        {            printf("time out\n");        }        else        {                // printf("mypoll.revents=%d\n",mypoll.revents);                // printf("mypoll.events=%d\n",mypoll.events);                if(mypoll[0].revents==mypoll[0].events)                {                    memset(buf,0,sizeof(buf));                    ret=read(0,buf,10);                    if(ret<0)                    {                        perror("read keyboard failed ");                        return 0;                    }                    printf("read keyboard:[%s]",buf);                }              if(mypoll[1].revents==mypoll[1].events)                {                    memset(buf,0,sizeof(buf));                    ret=read(fd,buf,2);                                      if(ret<0)                    {                        perror("read mouse failed ");                        return 0;                    }                    printf("read mouse:[%s]\n",buf);   //这里没加换行就不会及时打印                }                            }    }    return 0;}#include #include #include #include #include #include #include #include typedef void (*sighandler_t)(int);#define pathname  "/dev/input/mice"void handler(int sig);char buf[200]; int fd;int main(void){       int flag;    int ret;        fd=open(pathname,O_RDONLY);    if(fd<0)    {        perror("open failed");        return 0;    }    // 把鼠标的文件描述符设置为可以接受异步IO    flag=fcntl(fd,F_GETFL);    flag|=O_ASYNC;    fcntl(fd,F_SETFL,flag);    // 把异步IO事件的接收进程设置为当前进程    fcntl(fd,F_SETOWN,getpid());    // 注册当前进程的SIGIO信号捕获函数     signal(SIGIO,handler);    while(1)    {        memset(buf,0,sizeof(buf));        ret=read(0,buf,10);        // if(ret<0)        // {        //     perror("read failed");        //     return 0;        // }        if(ret>0)       printf("read keyboard :[%s]\n",buf);        //sleep(2);    }    return 0;}void handler(int sig){    int ret;        if(sig!=SIGIO)        return;    memset(buf,0,sizeof(buf));    ret=read(fd,buf,5);    if(ret<0)    {        perror("read failed");        return ;    }    printf("read mouse :[%s]\n",buf);}猜你喜欢:Linux笔记(11)| 网络编程之自己动手写一个服务器和客户端基于红外传输的多点温度采集系统教你如何用蜂鸣器演奏乐谱
