如何正确使用 Unix exec C(++) 命令?

Ste*_*all 3 c++ unix multiprocessing

具体来说,我需要调用 exec 的一个版本,它维护当前工作目录并将标准输出到与调用 exec 的程序相同的终端。我还有一个需要以某种方式传递的字符串参数向量,我想知道如何去做这一切。我被告知,所有这一切都只能通过fork 和 exec来实现,并且由于谷歌上严重缺乏文档,我一直无法让 exec 部分工作。

我正在寻找什么 exec 方法可以完成此任务,以及如何调用它?

Eli*_*ght 5

如果您有一个字符串向量,那么您需要将其转换为数组char*并调用execvp

#include <cstdio>
#include <string>
#include <vector>

#include <sys/wait.h>
#include <unistd.h>

int main() {
    using namespace std;

    vector<string> args;
    args.push_back("Hello");
    args.push_back("World");

    char **argv = new char*[args.size() + 2];
    argv[0] = "echo";
    argv[args.size() + 1] = NULL;
    for(unsigned int c=0; c<args.size(); c++)
        argv[c+1] = (char*)args[c].c_str();

    switch (fork()) {
    case -1:
        perror("fork");
        return 1;

    case 0:
        execvp(argv[0], argv);
        // execvp only returns on error
        perror("execvp");
        return 1;

    default:
        wait(0);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记在 argv 末尾添加 NULL! (2认同)
  • 不要忘记调用 c_str()。 (2认同)