【发布时间】: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 哦,亲爱的我。我以为它已经由函数处理了。多么愚蠢的错误。你能做一个简短的回答,以便我接受并投票吗?