首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从Qt程序中执行setcap

尝试从Qt程序中执行setcap
EN

Stack Overflow用户
提问于 2022-04-28 07:57:54
回答 1查看 87关注 0票数 0

我试图以这种方式执行Qt程序中的setcap:

代码语言:javascript
复制
QProcess process;
QString command = "cat";
QStringList args;
args << _fileName;

process.start(command, args);
process.waitForFinished();

QString StdOut   = process.readAllStandardOutput();
QString StdError = process.readAllStandardError();
QString err      = process.errorString();



QProcess process_2;
command = "setcap";
args.clear();
args << "cap_kill=ep" << _fileName;

process_2.start(command, args);
process_2.waitForFinished();

StdOut   = process_2.readAllStandardOutput();
StdError = process_2.readAllStandardError();
err      = process_2.errorString();

作为_fileName,我使用来自QFileSystemModel的值,在我的例子中,它看起来像“/home/ekaterina/home”。

第一部分(只是为了测试路径正确性而编写的)工作正常,并将文件内容放入StdOut中。我希望第二部分返回类似于“不允许操作”的内容,因为QtCreator是运行它的项目,而不是作为根。但我得到错误字符串中的"execvp:没有这样的文件或目录“。怎么会这样呢?

当我试图运行具有"cap_setfcap“功能的项目可执行文件时,我得到了完全相同的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-03 15:19:47

正如@G.M.所建议的那样,最好的做法是为二进制文件提供完整的路径。您可以在您的系统中找到setcap的位置:

代码语言:javascript
复制
$ sudo which setcap

在Debian和Fedora上,返回/usr/sbin/setcap。在您的系统中,也可能是/sbin/setcap。然后将该字符串显式地嵌入到程序中:

代码语言:javascript
复制
command = "/sbin/setcap";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72040011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档