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 に答える