2009-11-15 28 views
3

具体来说,我需要调用exec版本来维护当前工作目录,并将标准发送到与调用exec的程序相同的终端。我也有一个字符串参数向量,我需要通过某种方式传递,我想知道如何去做所有这些。我被告知,所有这些都可能与fork和exec完全相同,并且由于谷歌上缺乏可用的文档,我一直无法让exec部分工作。如何正确使用Unix exec C(++) - 命令?

我正在寻找哪种可执行方法可以实现此目的,我该如何调用它?

回答

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; 
} 
+2

不要忘了把空在那的argv结束! – Suppressingfire 2009-11-15 23:10:36

+2

不要忘记调用c_str()。 – 2009-11-15 23:14:25

+0

谢谢,我张贴的代码被填充,而我敲出了一个完整的工作示例。 – 2009-11-15 23:20:04

1

你不一定需要谷歌找到了这一点,你应该有man命令可用,因此您可以通过man forkman exec(或者可能是man 2 forkman 3 exec)了解如何形成这些系统和库函数的参数。

在Debian和Ubuntu,这些手册页都在manpages-dev包,它可以安装使用的突触或:

sudo apt-get install manpages-dev