在C编程[Linux]中获取设备名称
这个问题可能涉及面很广。然而,一个公认的答案就足够了 有没有聪明的方法来获取设备名(在C编程[Linux]中获取设备名称,c,linux,C,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_NONBL
/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
并从Name字段中解析它
例如,我关注的输入设备显示如下
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检查名称
在解释其他元素方面做得很好。如果不提供设备名称的文件描述符,您如何知道要检索哪个设备名称?例如,我有一个给定的名称,希望找到匹配项。因此,我循环遍历“/dev/input/by id/”中的所有名称。我认为有一个命令可以直接检索设备名。所以我可以跳过打开文件、获取文件名、关闭文件的步骤。也许我现在太懒了。但在python中,有这样一个函数:P@ezFreak这在Python中是什么函数?哪一个模块?我刚才提到我看到了用python实现这一点的一种简单方法。这是C。对不起,你说的模块是什么意思?你可以在
/sys/class/input/event/device/name