【问题标题】:Spawning a new terminal and opening vim生成一个新终端并打开 vim
【发布时间】:2016-10-13 09:54:10
【问题描述】:

我想要实现的是从 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 测试文件

工作得很好。

请赐教!

【问题讨论】:

  • xterm 作为第一个参数添加到argv
  • @tkausl 哦,亲爱的我。我以为它已经由函数处理了。多么愚蠢的错误。你能做一个简短的回答,以便我接受并投票吗?

标签: c++ c fork xterm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-08-15
    • 2013-10-31
    • 1970-01-01
    • 2014-08-22
    • 2019-03-31
    • 2018-03-09
    • 2021-09-03
    • 2020-05-14
    • 2020-01-20
    相关资源
    最近更新 更多