2016-10-13 1 views
0

Я пытаюсь открыть новый терминал из программы C/C++ и запустить vim. Я делаю это путем разметки и выполнения «xterm -e vim [fname]». Попытайтесь, как я мог, я, похоже, не могу понять xterm, что я хочу, чтобы он это сделал.Нерест нового терминала и открытия vim

Ниже приведен соответствующий сегмент кода:

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/бен/ВИМ

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

Я получаю t он чувствовал себя я перепутались ARGC как-то, но я смущен, потому что работает следующее в окне XTERM:

XTERM -e ВИМ TestFile

работает прекрасно.

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

+0

Добавить 'xterm' в качестве первого аргумента к вашему' argv'. – tkausl

+0

@tkausl oh dearie me. Я думал, что это уже обработано функцией. какая глупая ошибка. можете ли вы сделать короткий ответ, чтобы я мог принять его и поддержать? – user3109672

ответ

1

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

Смежные вопросы