qt怎么调用linux命令,如何在Qt中执行复杂的linux命令?
lpapp..10为此目的存在的关键方法建立在QProcess:和因此,以下代码片段将是等同于command1 | command2不限制自己的一个或另一个解释器:QProcess process1QProcess process2;process1.setStandardOutputProcess(&process2);process1.start("echo myPass");proc
lpapp..
10
为此目的存在的关键方法建立在QProcess:
和
因此,以下代码片段将是等同于command1 | command2不限制自己的一个或另一个解释器:
QProcess process1
QProcess process2;
process1.setStandardOutputProcess(&process2);
process1.start("echo myPass");
process2.start("sudo -S shutdown -r now");
process2.setProcessChannelMode(QProcess::ForwardedChannels);
// Wait for it to start
if(!process1.waitForStarted())
return 0;
bool retval = false;
QByteArray buffer;
// To be fair: you only need to wait here for a bit with shutdown,
// but I will still leave the rest here for a generic solution
while ((retval = process2.waitForFinished()));
buffer.append(process2.readAll());
if (!retval) {
qDebug() << "Process 2 error:" << process2.errorString();
return 1;
}
您可以删除该sudo -S部分,因为您可以以root身份运行此小程序,以及设置权限.你甚至可以为关机程序设置setuid或setcap.
我们在构建商业Linux系统时通常做的是拥有一个最小的应用程序,可以为它正在尝试的活动获取setuid或setcap,然后我们在Linux 上system(3)或QProcess在Linux上显式调用它.基本上,
我会编写这个小应用程序以避免对整个应用程序提供完全root权限,因此限制访问权限以防止恶意使用,如下所示:
sudo chmod u+s /path/to/my/application
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)