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

标签 c++ unix multiprocessing

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

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

最佳答案

如果您有一个字符串 vector ,那么您需要将其转换为一个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;
}

关于c++ - 如何正确使用 Unix exec C(++) 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1739184/

相关文章:

c++ - 将字符转换为 UTF-8 背后的逻辑

c++ - 在 C++ 中将函数传递给类

python - os.kill 不处理生成的进程

多处理器机器上的 Java 堆和 GC?

c++ - Tensorflow C++ 占位符初始化

c++ - 我需要定时器每 25fps 显示图像缓冲区 (C++ win32)

unix - 线程安全和异步信号安全的区别

linux - 运行在最近一个命令之前执行的命令的命令?

java - 使用 Java process exec 通过 tee 命令将 telnet 输出通过管道传输到日志文件

python - random.seed(seed) 是否在多个进程中生成相同的序列?