Linux讀取設備ID
Linux讀取設備ID有很多種方法:
1、讀取系統文件
2、使用libudev獲取
最開始我是使用的讀取系統文件的方法,但是客戶那邊需要不間斷的讀取,操作次數多了以后,就達到了系統最大文件描述限制數(1024),然后就讀取不到了,就需要重新打開軟件才行。
為了解決客戶這個問題,就改用libudev來實現
#include <libudev.h> #include <stdio.h> void get_camera_id(const char *devicename) { struct udev *udev = udev_new(); struct udev_device *dev = udev_device_new_from_subsystem_sysname(udev, "video4linux", devicename); if (!dev) return; // 獲取父設備(通常是USB或PCI設備) struct udev_device *parent = udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_device"); if (parent) { printf("廠商ID: %s\n", udev_device_get_sysattr_value(parent, "idVendor")); printf("產品ID: %s\n", udev_device_get_sysattr_value(parent, "idProduct")); printf("序列號: %s\n", udev_device_get_sysattr_value(parent, "serial")); } udev_device_unref(dev); udev_unref(udev); } int main() { // 傳入/dev/video0中的"video0" get_camera_id("video0"); return 0; }
@g++ tt.cpp -o tt -ludev -std=c++11
系統一般都帶的有 libudev 這個庫,不用自己編譯,直接鏈接使用就可以了。
// 查詢系統是否有 libudev ldconfig -p | grep libudev


浙公網安備 33010602011771號