linux系统调用read读取event键盘输入。

发布于 2022-09-12 03:01:11 字数 1318 浏览 14 评论 0

#include<string.h>
#include<fcntl.h>
#include<linux/input.h>
#include<unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#define CHECK_POINT
int main(){
        int fd = open("/dev/input/event2",O_RDONLY);
        #ifdef CHECK_POINT
        printf("fd = %d\n",fd);
        #endif
        struct input_event t;
        printf("size of t = %d\n",sizeof(t));
        while(1)
        {
                printf("while -\n");
                sleep(1);
                int len = read(fd, &t, sizeof(t));
                if(len == sizeof(t))
                {
                        printf("read over\n");
                        if(t.type==EV_KEY)
                                if(t.value==0 || t.value==1)
                                {
                                        printf("key %d %s\n", t.code, (t.value) ? "Pressed" : "Released");
                                        if(t.code == KEY_ESC)
                                                break;
                              }
                }
                #ifdef CHECK_POINT
                printf("len = %d\n",len);
                #endif
        }
        return 0;
}

我的代码在第20行,系统调用read()这里会阻塞,但是我按下键盘按键也没有任何反应,没有读取到键盘按键。只能ctrl+c退出程序。请大佬指点。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只是一片海 2022-09-19 03:01:11

键盘设备不一定关联到/dev/input/event2
得看看cat /proc/bus/input/devices

I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input1
int fd = open("/dev/input/event1",O_RDONLY);
    if(fd < 0){
        perror("open event fail:");
        return -1;
    }

    struct input_event t;
    while(1){
        if(read(fd, &t, sizeof(t)) == sizeof(t)){

            if(t.type==EV_KEY && (t.value==0 || t.value==1)){

                printf("key %d %s\n", t.code, (t.value) ? "Pressed" : "Released");
                if(t.code == KEY_ESC)
                    break;
            }
        }

    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文