Qt 获取当前系统中连接的所有USB设备的信息 libudev版

Qt 获取当前系统中连接的所有USB设备的信息 libudev版

flyfish

环境
Ubuntu22.04
Qt 6.2.4

#include <QCoreApplication>  // 包含 Qt 核心模块
#include <libudev.h>        // 包含 libudev 库
#include <stdio.h>          // 包含标准输入输出函数
#include <stdlib.h>         // 包含标准库函数
#include <string.h>         // 包含字符串处理函数// 用于获取USB设备的信息并打印出来
void listUSBInfo() {struct udev *udev;  // udev 上下文struct udev_enumerate *enumerate;  // 用于枚举设备的对象struct udev_list_entry *devices, *dev_list_entry;  // 设备列表和当前设备条目struct udev_device *dev;  // 设备对象// 初始化udevudev = udev_new();  // 创建一个新的 udev 上下文if (!udev) {fprintf(stderr, "Can't create udev\n");  // 如果创建失败,输出错误信息并返回return;}// 创建一个用于枚举设备的对象enumerate = udev_enumerate_new(udev);  // 创建一个新的 udev_enumerate 对象if (!enumerate) {fprintf(stderr, "Can't create udev enumerate\n");  // 如果创建失败,输出错误信息并释放 udev 资源udev_unref(udev);return;}// 添加子系统过滤器,只枚举USB设备udev_enumerate_add_match_subsystem(enumerate, "usb");  // 添加子系统过滤器,只枚举 USB 子系统的设备udev_enumerate_scan_devices(enumerate);  // 扫描设备// 获取设备列表devices = udev_enumerate_get_list_entry(enumerate);  // 获取设备列表if (!devices) {fprintf(stderr, "No devices found\n");  // 如果没有找到设备,输出错误信息并释放资源udev_enumerate_unref(enumerate);udev_unref(udev);return;}// 遍历设备列表udev_list_entry_foreach(dev_list_entry, devices) {  // 遍历设备列表const char *path;  // 设备路径path = udev_list_entry_get_name(dev_list_entry);  // 获取设备路径dev = udev_device_new_from_syspath(udev, path);  // 从系统路径创建设备对象if (dev) {const char *devnode = udev_device_get_devnode(dev);  // 获取设备节点const char *idVendor = udev_device_get_sysattr_value(dev, "idVendor");  // 获取厂商IDconst char *idProduct = udev_device_get_sysattr_value(dev, "idProduct");  // 获取产品IDconst char *manufacturer = udev_device_get_sysattr_value(dev, "manufacturer");  // 获取制造商名称const char *product = udev_device_get_sysattr_value(dev, "product");  // 获取产品名称if (devnode) {printf("Device Node: %s\n", devnode);  // 输出设备节点}if (idVendor) {printf("Vendor ID: %s\n", idVendor);  // 输出厂商ID}if (idProduct) {printf("Product ID: %s\n", idProduct);  // 输出产品ID}if (manufacturer) {printf("Manufacturer: %s\n", manufacturer);  // 输出制造商名称}if (product) {printf("Product Name: %s\n", product);  // 输出产品名称}printf("\n");  // 输出换行,使每个设备信息之间有空行分隔udev_device_unref(dev);  // 释放设备对象}}// 释放资源udev_enumerate_unref(enumerate);  // 释放 udev_enumerate 对象udev_unref(udev);  // 释放 udev 上下文
}int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);  // 创建 QCoreApplication 对象listUSBInfo();  // 调用 listUSBInfo 函数获取并打印 USB 设备信息return a.exec();  // 进入事件循环
}

结果

Device Node: /dev/bus/usb/001/001
Vendor ID: 1d6b
Product ID: 0002
Manufacturer: Linux 6.8.0-48-generic xhci-hcd
Product Name: xHCI Host ControllerDevice Node: /dev/bus/usb/001/002
Vendor ID: 046d
Product ID: c077
Manufacturer: Logitech
Product Name: USB Optical MouseDevice Node: /dev/bus/usb/001/003
Vendor ID: 046d
Product ID: c31c
Manufacturer: Logitech
Product Name: USB KeyboardDevice Node: /dev/bus/usb/002/001
Vendor ID: 1d6b
Product ID: 0003
Manufacturer: Linux 6.8.0-48-generic xhci-hcd
Product Name: xHCI Host Controller

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13465.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

CAN总线位同步的使用以及总线仲裁规则详解

目录 1. 位同步 1.1 位时序 1.2 硬同步 1.3 再同步 1.4 波特率计算 2. 仲裁 2.1 先占先得 2.2 非破坏性仲裁 1. 位同步 CAN总线没有时钟线&#xff0c;总线上的所有设备通过约定波特率的方式确定每一个数据位的时长&#xff0c;发送方以约定的位时长每隔固定时…

Python爬虫开发中的分析与方案制定

网站分析作为获取数据的重要手段&#xff0c;其重要性不言而喻。Python作为一种强大的编程语言&#xff0c;因其简洁的语法和强大的库支持&#xff0c;成为开发爬虫的首选工具。本文将深入探讨Python爬虫开发中的分析与方案制定&#xff0c;并在代码中加入代理信息&#xff0c;…

深入理解接口测试:实用指南与最佳实践5.0(一)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

基于Matlab 火焰识别技术

课题介绍 森林承担着为人类提供氧气以及回收二氧化碳等废弃气体的作用&#xff0c;森林保护显得尤其重要。但是每年由于火灾引起的事故不计其数&#xff0c;造成重大的损失。如果有一款监测软件&#xff0c;从硬件处获得的图像中监测是否有火焰&#xff0c;从而报警&#xff0…

Python酷库之旅-第三方库Pandas(209)

目录 一、用法精讲 976、pandas.MultiIndex.set_codes方法 976-1、语法 976-2、参数 976-3、功能 976-4、返回值 976-5、说明 976-6、用法 976-6-1、数据准备 976-6-2、代码示例 976-6-3、结果输出 977、pandas.MultiIndex.to_frame方法 977-1、语法 977-2、参数…

SQL 窗口函数

窗口函数用于在不改变查询结果集行数的情况下&#xff0c;对每一行执行聚合计算或其他复杂的计算&#xff0c;可以跨行计算。 随着窗口函数的出现&#xff0c;无须再使用关联子查询。窗口函数的可读性很好&#xff0c;代码也很简洁。 1 实践 1.1 营业额年度变化 需求&#…

36.Redis核心设计原理

本文针对前面的讲解做一次总结 1.Redis基本特性 1.非关系型的键值对数据库&#xff0c;可以根据键以O(1)的时间复杂度取出或插入关联值 2.Redis的数据是存在内存中的 3.键值对中键的类型可以是字符串&#xff0c;整型&#xff0c;浮点型等&#xff0c;且键是唯一的 4.键值对中…

《人工智能网络安全现状(2024)》深度解读:机遇、挑战与应对策略

在当今数字化浪潮汹涌澎湃的时代&#xff0c;人工智能&#xff08;AI&#xff09;与网络安全已然深度交融&#xff0c;二者相互作用所塑造的发展态势正深刻重塑着我们的信息安全格局。《人工智能网络安全现状&#xff08;2024&#xff09;》这份报告恰似一盏明灯&#xff0c;为…

光控资本 :股票支撑位是什么?股票支撑位怎么找?

股票支撑位是指在股票价格的前史K线走势有两次或者两次以上&#xff0c;出现下跌到某一方位&#xff0c;股票就出现反弹的走势&#xff0c;则投资者可以把这个方位称为支撑位&#xff0c;支撑位阐明下方托单较多&#xff0c;个股无法持续下跌&#xff0c;在托单的影响下&#x…

网站小程序app怎么查有没有备案?

网站小程序app怎么查有没有备案&#xff1f;只需要官方一个网址就可以&#xff0c;工信部备案查询官网地址有且只有一个&#xff0c;百度搜索 "ICP备案查询" 找到官方gov.cn网站即可查询&#xff01; 注&#xff1a;网站小程序app备案查询&#xff0c;可通过输入单位…

STM32+AI语音识别智能家居系统

基于 STM32 和 AI 语音识别的智能家居系统的详细硬件和软件设计&#xff0c;包括各个模块的详细描述和代码示例。 一、硬件设计 1. 微控制器&#xff08;STM32&#xff09;&#xff1a; 选择 STM32F7 系列或更高性能的芯片&#xff0c;如 STM32F767ZIT6&#xff0c;以满足处理…

【初阶一】初识c语言

【初阶一】初识c语言 一、为什么学C语言&#xff1f;二、学习前的准备1.搭建编译环境以及使用2.代码库GitHub/Gitee创建以及使用3.写博客的作用以及教学 三、个人感悟 一、为什么学C语言&#xff1f; C语言是一门经久不衰的计算机编程语言&#xff0c;有句话叫&#xff1a;万物…

Linux DRM 那些事 - HDMI 接口 DTS 配置

本文基于RockPI 4A单板Debian系统 Linux 4.4 内核介绍DRM框架HDMI接口DTS配置。 在DTS中主要实现&#xff1a;HDMI的使能、VOP绑定、IOMUX引脚配置和HDMI控制器配置。 一、HDMI 配置 文件&#xff1a;arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi #include "rk3…

QT仿QQ聊天项目,第三节,实现聊天界面

一&#xff0c;界面控件示意图 界面主要由按钮QPushButton,标签QLabel,列表QListWidget 要注意的是QListWidget既是实现好友列表的控件&#xff0c;也是实现聊天气泡的控件 二&#xff0c;控件样式 QPushButton#btn_name {border:none;}QPushButton#btn_close {border:1px;bac…

前端学习八股资料CSS(二)

更多详情&#xff1a;爱米的前端小笔记&#xff0c;更多前端内容&#xff0c;等你来看&#xff01;这些都是利用下班时间整理的&#xff0c;整理不易&#xff0c;大家多多&#x1f44d;&#x1f49b;➕&#x1f914;哦&#xff01;你们的支持才是我不断更新的动力&#xff01;找…

项目笔记:在stm32f103c8上用DMA控制串口收发

一、传统串口收发与引入DMA控制的区别 传统串口收发每一步都经过CPU处理和控制&#xff0c;当总线数据量大且频繁时CPU要反复地进入中断中处理&#xff0c;而引入DMA的差异就在于DMA会自动处理这个过程&#xff0c;并不需要占用CPU。 二、在不同芯片上所包含的DMA数量不同 对于…

基于SpringBoot的“原创歌曲分享平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“原创歌曲分享平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 平台功能结构图 平台首页界面图 用户注册界面…

CLion配置QT开发环境

一、将qmake工程转为cmake工程&#xff08;方法一&#xff1a;用工具转换并做适当修改&#xff09; 1、工具链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1grW2QY3sW8X2JaHWM_ePPw 提取码&#xff1a;7at4 工具源码:https://github.com/milahu/qmake2cmake 2、执行…

【动手学电机驱动】 STM32-FOC(7)基于 MCSDK6.0 控制与调试速度环

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…