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

具体来说,我需要调用exec的版本来维护当前的工作目录,并将标准发送到与调用exec的程序相同的terminal。 我也有一个string参数的vector,我需要通过某种方式,我想知道如何去做所有这一切。 我已经被告知,所有这一切都可能完全与叉和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() 。

你不一定需要谷歌找到这个,你应该有可用的man命令,这样你可以man forkman exec (或者也许man 2 forkman 3 exec )来了解这些系统和库的参数如何职能应该形成。

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

 sudo apt-get install manpages-dev