产生一个新的终端并打开vim

时间:2016-10-13 09:54:11

标签: c++ c fork xterm

我想要实现的是从C / C ++程序打开一个新终端并运行vim。我是通过分叉和执行“xterm -e vim [fname]”来做到这一点的。尽我所能,我似乎无法让xterm了解我希望它做什么。

以下是相关的代码段:

    int pid = fork();
    if (pid){
        //parent
        int retstat;
        waitpid (pid, &retstat, 0);
    }else{
        //child

        char* ifname_cchararr = (char*)malloc(ifname.length() + 1);
        strcpy (ifname_cchararr, ifname.c_str());
        char* const argv[4] = {"-e", "vim", ifname_cchararr, NULL};
       // std::cout << ifname_cchararr<<std::endl;
        execvp ("xterm", argv);
    }

运行程序导致xterm抱怨:

  

-e:显式shell已经是/ usr / bin / vim

     

-e:错误的命令行选项“testfile”

我觉得我以某种方式搞砸了argc,但我很困惑,因为在xterm窗口中运行以下内容:

  

xterm -e vim testfile

完美无缺。

请赐教!

1 个答案:

答案 0 :(得分:1)

您忘记在xterm中添加argv作为第一个参数。可能看起来有点奇怪,您必须将程序名称添加到argv,因为您已经告诉execvp您正在调用哪个程序,但就是这样。有关 why 的更多信息,请参阅最近在Unix和&amp; Linux:Why does argv include the program name