簡體   English   中英

使用C ++從設備文件描述符中檢索Linux中的設備信息

[英]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/ ,該目錄中有幾個用於標識設備的文件。

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硬盤驅動器。

設備信息不是由某些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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM