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号