3

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

我在寻找什么 exec 方法可以实现这一点,我该如何称呼它?

4

3 回答 3

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;
}
于 2009-11-15T23:06:42.117 回答
1

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

于 2009-11-15T23:01:12.633 回答
1

您不一定需要 google 才能找到这一点,您应该有man可用的命令,以便您可以man forkman exec(或可能man 2 forkman 3 exec)了解这些系统和库函数的参数应该如何形成。

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

sudo apt-get install manpages-dev
于 2009-11-15T23:16:15.660 回答