用50行代码实现Linux系统usb设备插拔检测(基于Qt的神技能)

编程入门 行业动态 更新时间:2024-10-09 14:24:38

用50行代码实现Linux系统usb设备插拔检测(基于Qt的<a href=https://www.elefans.com/category/jswz/34/1761404.html style=神技能)"/>

用50行代码实现Linux系统usb设备插拔检测(基于Qt的神技能)

在一些应用中,程序需要检测usb设备的插拔操作,网上提供多种实现方法,实现代码复杂,大部分都要需要了解usb设备或者linux系统的一些细节知识。

本文介绍一种简单有效的办法,不需要了解usb接口背后的细节,借助linux系统提供的lsusb命令和Qt的QProcess类即可实现。而且无偿说明原理,附上源代码,真的不到50行,而且完全不需要下载,不需要C币(你懂的)。

原理

1、lsusb命令

linux系统lsusb命令能够列举已经系统接入的usb设备,这个命令非常简单,看图秒懂。

我们只需要知道-d这个参数,提供usb的venderID和productID,就能进一步精准查询usb设备的类型。如果还不了解usb的这两个重要ID,这个百度一下,很简单。当然不了解也没关系。

 2、QProcess

类QProcess是Qt提供的启动外部进程的类,这个类有很多超级有用的接口,我们使用的接口是QByteArray QProcess::readAllStandardOutput(),这个接口能返回启动进程的输出。例如我们用QProcess启动了命令lsusb,那么lsusb命令的输出都能获得,得到了输出,根据输出的行数,就能判断系统插入了多个usb设备。

实现

说到这里,估计聪明的同学已经知道代码怎么写了,最简单的测试代码真的不到50行哦:

#include <QCoreApplication>
#include <QProcess>
int usbCount(const QString& vender)
{QProcess process;QStringList args;if (!vender.isEmpty()){args.append("-d");args.append(vender);process.start("lsusb", args);}else{process.start("lsusb");}bool bres = process.waitForFinished();QString result = QString(process.readAllStandardOutput());QStringList outputList = result.split("\n");return outputList.count(); //返回可能包含一行空字符行,但是不影响检测结果
}
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int usbCnt = -1;bool usbChanged = true;QString argd=QString("096e:0303"); //usb设备的venderID和productID,这个是可以预知的,当然不输入也可以do{int usbCnt_new = usbCount( argd);if (usbCnt == usbCnt_new)usbChanged = false;elseusbChanged = true;usbCnt = usbCnt_new;if (usbChanged){;//yes!}sleep(2000);}while(true);return 0;
}

更多推荐

用50行代码实现Linux系统usb设备插拔检测(基于Qt的神技能)

本文发布于:2024-02-27 20:09:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1765975.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:神技   插拔   代码   设备   系统

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!