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

 

posted @ 2025-03-04 10:35  十一的杂文录  阅读(169)  评论(0)    收藏  举报