首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >evdev设备的访问抓取状态

evdev设备的访问抓取状态
EN

Unix & Linux用户
提问于 2019-01-07 00:09:20
回答 1查看 795关注 0票数 2

我需要在程序中检索evdev设备的抓取状态。更具体地说,我需要检索这里看到的grab结构中的evdev指针的状态:https://elixir.bootlin.com/linux/v4.20/source/drivers/input/evdev.c#L42 (如果它是NULL或NULL)。这在用户空间中是完全可能的吗?例如,通过使用/dev/(k)mem读取内核内存,还是需要编写内核模块?我该从哪里开始呢?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-01-07 08:23:08

要确定设备当前是否被从用户空间抓取,您可以自己尝试抓取它;要么自己使用EVIOCGRAB ioctl,要么使用libevdev中的libevdev_grab

代码语言:javascript
复制
if (!ioctl(evdevfd, EVIOCGRAB, (void *) 1)) {
    // We grabbed the device, no one else had it; release it
    ioctl(evdevfd, EVIOCGRAB, (void *) 0);
} else if (errno == EBUSY) {
    // The device is busy, someone else has it
} else {
    // Something else went wrong
}

代码语言:javascript
复制
struct libevdev *dev;
libevdev_new_from_fd(evdevfd, &dev);
if (!libevdev_grab(dev, LIBEVDEV_GRAB)) {
    // We grabbed the device, no one else had it; release it
    libevdev_grab(dev, LIBEVDEV_UNGRAB);
} else if (errno == EBUSY) {
    // The device is busy, someone else has it
} else {
    // Something else went wrong
}

(大量添加错误处理;evdevfd是您感兴趣的evdev设备的打开文件描述符。)

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/492909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档