繁体   English   中英

在C编程中获取设备名称[Linux]

[英]Get device name in C programming [Linux]

这个问题可能是广泛的。 但是,一个公认的答案就足够了。

获取设备名称( /dev/input/ )的任何巧妙方法? 目前,这就是我正在做的:

char name[256] = "Unknown";
char *device = "/dev/input/by-id/usb-Logitech_USB_Keyboard-event-kbd";

// Open device & get file descriptor
if ((fd = open (device, O_RDONLY | O_NONBLOCK)) == -1)
{
    ...
}

// Get device name
ioctl (fd, EVIOCGNAME (sizeof (name)), name);

是否有更直接的方法来获取设备名称? 我想跳过必须打开文件才能获得设备名称的部分。

原因是因为我要遍历该文件夹中的所有设备以查找匹配的设备名称。

也许与此类似(Python),但是在C语言中:

from evdev import InputDevice,list_devices

devices = map(InputDevice, list_devices())

for dev in devices:
    print dev.fn+" - "+dev.name
    if "SomeDevicaName" in dev.name:
        infile_path = dev.fn

我发现最简单的方法是通过读取/proc/bus/input/devices并将其解析出“名称”字段。

例如,我关注的输入设备显示如下。

I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="gpio-keys"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/gpio-keys/input/input0
U: Uniq=
H: Handlers=kbd event0
B: PROP=0
B: EV=3
B: KEY=300000 0 0 78000000 0

然后,我可以在名称上进行匹配,以避免重复和打开每个输入设备。 当然,如果快速添加和删除您的输入设备,这可能是TOCTOU竞赛。 打开设备后,仍应使用ioctl检查名称。

unix.stackexchange上的这个答案在解释其他元素方面做得很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM