簡體   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