c++ - 使用 C++ 从设备文件描述符中检索 Linux 中的设备信息

标签 c++ linux

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

例如,在 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/ ,其中有几个文件标识设备。

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 硬盘驱动器。

关于c++ - 使用 C++ 从设备文件描述符中检索 Linux 中的设备信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16070737/

相关文章:

c++ - 使用字符串 vector 进行插入排序

c++ - 串行端口轮询在 Beaglebone Black 上不起作用

c++ - 对于使用 Makefile 的大型 C++ 项目,什么是好的目录结构?

c++ - 异步 ReadDirectoryChangesW 调用阻止线程退出

linux - 未定义的对 -finstrument-functions 的引用

c++ - 检查 std::vector<bool> 是否仅由真值组成

php - 查找/检测/格式化周围文件中使用的 GetText 字符串

php - 在 Linux 中记录脚本命令和错误

regex - Linux 删除egrepped行

linux - sudo apt-get 安装 libao-common