具体来说,我需要调用一个 exec 版本来维护当前工作目录并将标准输出发送到与调用 exec 的程序相同的终端。我还有一个需要以某种方式传递的字符串参数向量,我想知道我将如何去做所有这些。有人告诉我,所有这一切都只能通过fork 和 exec来实现,并且由于 google 上严重缺乏文档,我一直无法让 exec 部分正常工作。
我在寻找什么 exec 方法可以实现这一点,我该如何称呼它?
具体来说,我需要调用一个 exec 版本来维护当前工作目录并将标准输出发送到与调用 exec 的程序相同的终端。我还有一个需要以某种方式传递的字符串参数向量,我想知道我将如何去做所有这些。有人告诉我,所有这一切都只能通过fork 和 exec来实现,并且由于 google 上严重缺乏文档,我一直无法让 exec 部分正常工作。
我在寻找什么 exec 方法可以实现这一点,我该如何称呼它?
如果你有一个字符串向量,那么你需要将它转换为一个数组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;
}
您可能正在寻找execv() 或 execvp()。
您不一定需要 google 才能找到这一点,您应该有man
可用的命令,以便您可以man fork
和man exec
(或可能man 2 fork
和man 3 exec
)了解这些系统和库函数的参数应该如何形成。
在 Debian 和 Ubuntu 中,这些手册页位于manpages-dev
包中,可以使用 synaptic 或使用以下命令安装:
sudo apt-get install manpages-dev