我如何从设备文件描述符中获取设备信息,包括设备名称?

例如,在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;
}

===============>>#1 票数:3 已采纳

没有用于获取设备信息的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/ ,该目录中有几个用于标识设备的文件。

idVendoridProduct包含数字045e00cb 使用这些数字,您可以查看文件/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硬盘驱动器。

===============>>#2 票数:1

设备信息不是由某些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/

  ask by vdm translate from so

未解决问题?本站智能推荐: