我如何从设备文件描述符中获取设备信息,包括设备名称?
例如,在 SKYPE 中我可以看到设备“/dev/snd/pcmC2D0c”的名称为:“USB 2.0 Camera.USB Audio Default Audio Device (default:CARD=Camera)”
我如何使用 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 设备,它有其他设备类型信息来源。
您可以查看 sysfs
文件系统,安装在 /sys
.有目录/sys/bus/usb/devices/
,它有指向真实设备的符号链接(symbolic link)条目。
在我的系统上,例如 /sys/bus/usb/devices/3-4
.此符号链接(symbolic link)指向目录 /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 硬盘驱动器。
关于c++ - 使用 C++ 从设备文件描述符中检索 Linux 中的设备信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16070737/