gpt4 book ai didi

c++ - 使用 QSerialPort 打开 USB 加密狗时出现权限错误

转载 作者:行者123 更新时间:2023-11-30 03:39:12 26 4
gpt4 key购买 nike

我正在尝试使用 QSerialPort 访问 USB 加密狗(其中包含 SIM 卡)。加密狗已成功识别,但在尝试打开它时出现权限错误。 Qt 文档中的错误消息描述指出,这可能是设备正在被其他服务访问或用户没有权限。我试图断开加密狗并再次连接,结果相同。我该如何解决这个问题。我在使用 Qt 5.7 的 Ubuntu 16.04 64 位上。我正在运行的代码如下。

#include <QApplication>
#include <QString>
#include <QDebug>
#include <QList>
#include <QSerialPortInfo>
#include <QSerialPort>
#include <QDebug>


int main(int argc, char *argv[])
{
QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts();
QSerialPort *port = nullptr;
QString portName;
int counter = 0;

while(counter < ports.size())
{
portName = ports[counter].portName();
quint16 productId = ports[counter].productIdentifier();
quint16 vendorId = ports[counter].vendorIdentifier();
QString manufacturerName = ports[counter].manufacturer();

qDebug() << "Port Name: " << portName;
qDebug() << "Product ID:" << productId;
qDebug() << "Vendor Id: " << vendorId;
qDebug() << "Manufacturer: " << manufacturerName;
++counter;

if(manufacturerName.contains("Huawei", Qt::CaseInsensitive))
{
qDebug() << "found!" << " name: " << portName;
port = new QSerialPort(portName);
break;
}
}


//Write and send the SMS
bool opened = port->open(QIODevice::ReadWrite);

if(!opened)
{
qDebug() << "Error: " << port->error();
}

// some more code here

return 0;
}

输出如下:

Port Name:  "ttyS4"
Product ID: 11799
Vendor Id: 32902
Manufacturer: ""
Port Name: "ttyUSB0"
Product ID: 5382
Vendor Id: 4817
Manufacturer: "HUAWEI"
found! name: "ttyUSB0"
Error: QSerialPort::SerialPortError(PermissionError)

最佳答案

串行设备通常位于/dev/文件夹中,归 root 所有。您可能需要根访问权限才能打开设备。

例如,插入加密狗后,您可以使用以下命令获取设备权限:

ls -l /dev/ttyUSB0

如果您使用“sudo”或以 root 身份运行该程序,它是否有效?

在终端中,尝试运行以“sudo”命令为前缀的程序。这会将您的权限提升到根级别:

sudo ./my_program

关于c++ - 使用 QSerialPort 打开 USB 加密狗时出现权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38978210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com