2012-09-27 14 views
0
寫上

可能重複:
select() isn't responding to writing on /dev/input/miceselect()的心不是響應的/ dev /輸入/小鼠

我寫一個程序,它通過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"); 
       } 

    } 
} 

當我執行它給像輸出方案:

[[email protected] Project]# gcc select.c 
[[email protected] 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 

雖然我不按任何鍵或移動鼠標。

+3

您正在打開用於書寫的輸入設備,並且正在select()中等待閱讀可能性。也許你應該打開這些設備閱讀? – SKi

回答

0

您正在打開,我認爲錯誤的文件

的/ dev /輸入/ EVENT3 - 鍵盤事件 的/ dev /輸入/事件2 - 鼠標事件

檢查與 貓的/ dev /輸入/ EVENT3