我试图以这种方式执行Qt程序中的setcap:
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“功能的项目可执行文件时,我得到了完全相同的结果。
发布于 2022-05-03 15:19:47
正如@G.M.所建议的那样,最好的做法是为二进制文件提供完整的路径。您可以在您的系统中找到setcap的位置:
$ sudo which setcap在Debian和Fedora上,返回/usr/sbin/setcap。在您的系统中,也可能是/sbin/setcap。然后将该字符串显式地嵌入到程序中:
command = "/sbin/setcap";https://stackoverflow.com/questions/72040011
复制相似问题