select () reagiert nicht auf das Schreiben in / dev / input / mice
Ich schreibe ein Programm, das durch überwachtselect()
auf der Tastatur und Maus Gerätedateien. Es wartet auf einen Schreibvorgang (dies sollte bei einem Tastendruck oder einer Mausbewegung geschehen) für diese Dateien, und sobald ein Schreibvorgang ausgeführt wird, werden einige Jobs ausgeführt.
Aber es funktioniert nicht. Mein Code ist unten angegeben.
#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");
}
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);
if(mouse_fd>kbd_fd)
{
fd_max=mouse_fd;
}
else
{
fd_max=kbd_fd;
}
while(1)
{
select((fd_max+1),&rfs,NULL,NULL,NULL);
sleep(2);
if(FD_ISSET(mouse_fd,&rfs))
{
printf("test mouse \n");
}
if(FD_ISSET(kbd_fd,&rfs))
{
printf("test keyboard \n");
}
}
}
Wenn ich das Programm ausführe, erzeugt es eine Ausgabe wie diese,
[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 keyboard
test keyboard
test keyboard
test keyboard
test keyboard
test keyboard
test keyboard
test keyboard
obwohl ich keine taste drücke. Außerdem wird die Mausgerätedatei nie mit select () ausgewählt, obwohl eine physische Mausbewegung vorliegt.
Was mache ich falsch?