Нерест нового терминала и открытие VIM

Я пытаюсь открыть новый терминал из программы на 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: явная оболочка уже была / usr / bin / vim

-e: неверная опция командной строки «testfile»

У меня такое ощущение, что я как-то испортил argc, но я запутался, потому что запускаю следующее в окне xterm:

xterm -e vim testfile

отлично работает

Пожалуйста, просветите меня!

0

Решение

Вы забыли добавить xterm в качестве первого аргумента в argv, Может показаться немного странным, что вы должны добавить имя программы в argv, так как вы уже говорите execvp какую программу вы вызываете, но так оно и есть. Для получения дополнительной информации Зачем, увидеть этот недавно заданный вопрос по Unix & Linux: Почему argv включает название программы

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]