0

可能重复:
select() 没有响应 /dev/input/mice 上的写入

我正在编写一个通过select()键盘和鼠标设备文件进行监视的程序。它等待对这些文件的任何写操作(这应该在有击键或鼠标移动时发生),并且一旦有写操作,就会执行一些作业。但它不起作用。代码如下。有人能帮我吗?

#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<linux/input.h>
#include<linux/uinput.h>
#include<sys/time.h>
#include<unistd.h>




void main()
{
    int mouse_fd,kbd_fd,fd_max;
    struct input_event ev;
    fd_set rfs,wfs;

    if((mouse_fd=open("/dev/input/event3",O_WRONLY))==-1)
            {
                printf("opening mouse device file has failed \n");
            }
    else
            {
                printf("opening mouse device file has been successfull \n");
            }
    if((kbd_fd=open("/dev/input/event2",O_WRONLY))==-1)
            {
                printf("opening keyboard device file has failed \n");
            }
    else
        {
            printf("opening keyboard device file has been successfull \n");
        }


    if(mouse_fd>kbd_fd)
        {
            fd_max=mouse_fd;
        }
    else
        {
         fd_max=kbd_fd;
        }

    while(1)
    {
         FD_ZERO(&rfs);
             FD_ZERO(&wfs);
             FD_SET(mouse_fd,&rfs);
             FD_SET(kbd_fd,&rfs);
             FD_SET(mouse_fd,&wfs);
             FD_SET(kbd_fd,&wfs);
                 select((fd_max+1),&rfs,NULL,NULL,NULL);

        if(FD_ISSET(mouse_fd,&rfs))
            {
                printf("test mouse \n");
            }
        if(FD_ISSET(kbd_fd,&rfs))
            {
                printf("test keyboard \n");
                }

   }
}

当我执行程序时,它会给出如下输出:

[root@localhost Project]# gcc select.c
[root@localhost Project]# ./a.out
opening mouse device file has been successfull 
opening keyboard device file has been successfull 
test keyboard 
test mouse 
test keyboard 
test mouse 
test keyboard 
test mouse 
test keyboard 
test mouse 
test keyboard 
test mouse 

虽然我没有按任何键或移动鼠标。

4

1 回答 1

0

你正在打开我认为错误的文件

/dev/input/event3 - 键盘事件 /dev/input/event2 - 鼠标事件

检查 cat /dev/input/event3

于 2012-09-28T06:02:41.877 回答