具体来说,我需要调用一个维护当前工作目录的exec版本,并将标准输出发送到与调用exec的程序相同的终端。我还有一个字符串参数的向量,我需要通过某种方式传递,我想知道我将如何做所有这些。我被告知所有这一切都可能只用 fork和exec ,并且由于谷歌上的文档缺乏可靠性,我一直无法让exec部分工作。
我正在寻找什么样的exec方法可以实现这一目标,我该怎么称呼它?
答案 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 fork
和man exec
(或者man 2 fork
和{ {1}})了解如何形成这些系统和库函数的参数。
在Debian和Ubuntu中,这些手册页位于man 3 exec
包中,可以使用synaptic或使用以下命令安装:
manpages-dev