2016-10-13 5 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/binに/ VIM

ました - e:不正なコマンドラインオプション "testfile"

私は彼は私が何とかのargcを台無しにしましたが、私は混乱している、xtermウィンドウに次のように実行されているので、気分:

のxterm -e vimのテストファイル完全に正常に動作します

を。

私を教えてください!

+0

'argv'に最初の引数として' xterm'を追加してください。 – tkausl

+0

@tkausl oh dearie me。私はそれが既に関数によって処理されていると思った。どのような愚かなエラー。 私はそれを受け入れてupvoteできるようにあなたは短い答えをすることができますか? – user3109672

答えて

1

argvに最初の引数としてxtermを追加しています。ちょっと変わったように思えますが、argvにプログラム名を追加する必要があります。あなたはすでにexecvpというプログラムを呼び出しているので、それはどういう意味なのでしょうか? なぜであるのですか?& UNIXの最近の質問を参照してください。Why does argv include the program name

関連する問題