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.rhkb.cn/news/470325.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot后端解决跨域问题

1.全局方式 新建一个conifg配置类&#xff0c;内容如下&#xff1a; Configuration public class CorsConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**")//是否发送Cookie.allowCrede…

「数据要素」行业简报|2024.11.上刊

纵观数据要素行业动态&#xff0c;洞察行业风向&#xff0c;把握行业脉搏&#xff01; 一、政策发布 1、《山东省公共数据资源登记管理工作规范(试行)》公开征求意见 11月7日&#xff0c;为认真贯彻落实《中共中央办公厅 国务院办公厅关于加快公共数据资源开发利用的意见》《…

什么是RAG? LangChain的RAG实践!

1. 什么是RAG RAG的概念最先在2020年由Facebook的研究人员在论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中提出来。在这篇论文中他们提出了两种记忆类型&#xff1a; 基于预训练模型&#xff08;当时LLM的概念不像现在这么如日中天&#xff0…

Vite初始化Vue3+Typescrpt项目

初始化项目 安装 Vite 首先&#xff0c;确保你的 Node.js 版本 > 12.0.0。然后在命令行中运行以下命令来创建一个 Vite Vue 3 TypeScript 的项目模板&#xff1a; npm init vitelatest进入项目目录 创建完成后&#xff0c;进入项目目录&#xff1a; cd vue3-demo启动…

nginx部署H5端程序与PC端进行区分及代理多个项目及H5内页面刷新出现404问题。

在项目中会碰见需要在nginx代理多个项目&#xff0c;如果在加上uniapp开发的H5端的项目&#xff0c;你还要在nginx中区分PC端和手机H5端&#xff0c;这就会让人很头大&#xff01;网上大部分的资料都是采用在nginx的conf配置文件中添加区分pc和手机端的变量例如&#xff1a;set…

软件测试项目实战

软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程&#xff0c;其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 在软件投入使用前&#xff0c;要经过一系列的严格测试&#xff0c;才能保证交付质量。 一、引言 1.编写目的 本文档…

2024开发者浏览器必备扩展,不允许还有人不知道~

在开发过程中&#xff0c;优秀的扩展工具能够极大提升我们的工作效率&#xff0c;简化工作流程&#xff0c;并使得在浏览器中的开发和调试变得更加便捷。 根据市场占比&#xff0c;Chrome、Safari、Edge、Firefox、Opera 是前五大浏览器&#xff0c;其中Chrome浏览器占据了领先…

分享一个傻瓜式一键启动的加速器

主要发现开通一个号能电脑手机互通&#xff0c;原来电脑手机各一个加速器钱包在滴血。。。一个月也很便宜差不多二十多 链接放这了&#xff0c;有需要自提&#xff1a;首页-小熊加速器http://xxjsq.co/ytfa

TDesign了解及使用

文章目录 1、概述2、快速开始2.1使用 npm 安装2.2通过 浏览器引入 安装2.3、使用 3、简单案例3.1 路由创建3.2、 页面创建3.3、 Table组件3.4、序号展示3.5、 图片展示及预览3.6、 性别字段处理 1、概述 TDesign 是腾讯推出的设计系统&#xff0c;旨在提供一致的设计语言和视觉…

11Java面向对象高级(篇2,Java程序的核心套路!!!!)

更多java知识请点击上面专栏&#xff01;&#xff01;&#xff01; 修道之始&#xff1a; 01Java基础入门(纯小白也能入门&#xff0c;速通Java&#xff0c;知识点归纳超级全面&#xff01;&#xff01;&#xff01;2024版后端成仙起始篇&#xff01;&#xff01;&#xff01;…

定时器(QTimer)与随机数生成器(QRandomGenerator)的应用实践——Qt(C++)

一、QTimer与QRandomGenerator &#xff08;一&#xff09;QTimer&#xff08;定时器&#xff09;[2] QTimer类为定时功能提供了一个高级编程接口。在使用QTimer时&#xff0c;实例化一个QTimer对象并将其timeout()发射信号与合适的信号槽相连接。通过调用QTimer的start()函数…

翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践

引言&#xff1a;自2021年起&#xff0c;翼鸥教育便开始应用OceanBase社区版&#xff0c;两年间&#xff0c;先后部署了总计12套生产集群&#xff0c;其中核心集群占比超过四分之三&#xff0c;所承载的数据量已突破30TB。自2022年10月&#xff0c;OceanBase 社区发布了4.2.x 版…

AI绘画经验(stable-diffusion)

提示词理解 总的 AI绘画的优点是【想象力】&#xff0c;而不是自然语言的精确描述。 AI绘画只能控制【主体】和【风格】&#xff0c;姿势&#xff0c;表情&#xff0c;装饰&#xff0c;手指都太过于详细了。这也是【人类画师的魅力】 准确描述是徒劳的&#xff0c;只能通过【…

使用支付宝沙箱完成商品下单

使用支付宝沙箱完成商品下单 一&#xff1a;效果展示&#xff1a; 二&#xff1a;代码实现 1&#xff1a;准备工作&#xff1a; 申请支付宝沙箱账户&#xff1a; 登录 - 支付宝 然后要下载密钥密钥工具来生成密钥&#xff1b; 2&#xff1a;流程分析&#xff1a; 先是用户…

Linux设置socks代理

公司里绝大多数主机已经禁止外网访问&#xff0c;仅保留一台主机设置socks作为代理服务器。如下为对socks这一概念的学习整理 什么是socks 是OSI模型下会话层的协议&#xff0c;位于表示层与传输层之间&#xff0c;作用是&#xff1a; exchanges network packets between a c…

以往运维岗本人面试真题分享

以下是本人面试运维岗的一些面试经历&#xff0c;在此做个记录分享 目录 TCP/IP三次握手 IPtables IPtables四表五链都是什么&#xff1f; nat端口如何做&#xff1f; 开放本机的80端口该如何做&#xff1f; 如何在单用户模式下引导Centos&#xff1f; nginx轮询模式都有…

【Hadoop实训】Hive 数据操作①

目录 一、准备文件 1、创建表 2、 数据映射 二、HIVE的数据操作 1、基本查询 a、全表查询 b、选择特定字段查询 c、查询员工表总人数 d、查询员工表总工资额 e、查询5条员工表的信息 2、Where条件查询 a、查询工资等于5000的所有员工 b、查询工资在500到1000的员工信息 …

3.5【数据库系统】ER图

2、实体之间的关系 下面主要针对两个实体间的关系进行介绍 &#xff08;a&#xff09;一对一联系&#xff08;1:1&#xff09;如班级和班长&#xff0c;一个班级只有一个班长&#xff0c;一个班长只能在一个班级任职。 &#xff08;b&#xff09;一对多联系&#xff08;1&#…

笔记 | image may have poor performance,or fail,if run via emulation

在Docker Desktop中现象如图&#xff1a; 当你运行 AMD64 平台代码时&#xff08;Intel 和 AMD 芯&#xff09;&#xff0c;你的 Mac 必须模拟其CPU架构&#xff08;因为你自身是ARM&#xff09;。这通常会非常吃性能。 Docker Desktop 警告你在模拟 Intel/AMD x64 CPU 时性能可…

想租用显卡训练自己的网络?AutoDL保姆级使用教程(PyCharm版)

各位小伙伴们大家好~ 不知道各位同学在科研过程中是否有这样的苦恼 电脑无显卡。难不成我要用CPU跑实验吗&#xff1f;救救我吧电脑显卡算力太低。训练过程慢慢慢慢慢&#xff0c;等半天都出不来结果电脑显卡显存不够&#xff0c;batchsize稍微高一点点&#xff0c;就要爆显存…