![](/img/trans.png)
[英]How to check USB port and give device (memory, etc) information in linux using c++
[英]Retrieve device information in Linux from device file descriptor using c++
我如何從設備文件描述符中獲取設備信息,包括設備名稱?
例如,在SKYPE中,我可以看到設備“ / dev / snd / pcmC2D0c”的名稱為:“ USB 2.0相機。USB音頻默認音頻設備(默認:CARD =相機)”
我如何使用C ++獲得這樣的設備名稱?
int file = open("/dev/snd/pcmC2D0c", O_RDWR | O_NONBLOCK, 0);
if (-1 == file) // check is error occurred during opening?
{
perror("open");
return -1;
}
if (-1 == ioctl(file, /* appropriate ioctl value to get the device info? */, /* appropriate structure to fill with device info? */))
{
perror("ioctl");
return -1;
}
沒有用於獲取設備信息的ioctl
值。 在這種特殊情況下,它是一個USB設備,它具有其他用於獲取設備類型信息的來源。
您可以查看安裝在/sys
上的sysfs
文件系統。 目錄/sys/bus/usb/devices/
包含指向實際設備的符號鏈接條目。
在我的系統上,例如有/sys/bus/usb/devices/3-4
。 該符號鏈接指向目錄/sys/devices/pci0000:00/0000:00:12.0/usb3/3-4/
,該目錄中有幾個用於標識設備的文件。
idVendor
和idProduct
包含數字045e
和00cb
。 使用這些數字,您可以查看文件/usr/share/misc/usb.ids
並找到
...
045e Microsoft Corp.
...
00ca Fingerprint Reader
00cb Basic Optical Mouse v2.0
00ce Generic PPC Flash device
...
例如,您對硬盤驅動器有類似的信息。 /sys/devices/pci0000:00/0000:00:11.0/host0/target0:0:0/0:0:0:0/block/sda/
是我的硬盤,此目錄中的條目device/model
包含字符串TOSHIBA DT01ACA1
,將其標識為THOSHIBA 1TB硬盤驅動器。
設備信息不是由某些ioctl檢索的(盡管通過鏈接許多ioctl可以實現),而是通過sysfs和/或udev。 您可以使用命令行工具/sbin/udevadm
查詢有關設備的信息。 有效地,udev將通過sysfs進行屬性遍歷並從那里查詢所有信息。 但是為了方便起見,這是由udev抽象的。
在/ dev中的任意條目上嘗試以下操作
/sbin/udevadm info --query all --name=/dev/...
udev API http://www.freedesktop.org/software/systemd/libudev/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.