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

时间:2009-11-15 22:58:22

标签: c++ unix multiprocessing

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

我正在寻找什么样的exec方法可以实现这一目标,我该怎么称呼它?

3 个答案:

答案 0 :(得分:4)

如果您有字符串向量,则需要将其转换为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;
}

答案 1 :(得分:1)

您可能正在寻找execv() or execvp()

答案 2 :(得分:1)

您不一定需要谷歌才能找到它,您应该有man命令,这样您就可以man forkman exec(或者man 2 fork和{ {1}})了解如何形成这些系统和库函数的参数。

在Debian和Ubuntu中,这些手册页位于man 3 exec包中,可以使用synaptic或使用以下命令安装:

manpages-dev