[英]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.