2016-10-13 2 views
0

Was ich versuche zu erreichen, ist ein neues Terminal aus einem C/C++ - Programm zu öffnen und vim auszuführen. Ich tue das, indem ich "xterm -e vim [fname]" forkiere und ausführe. Versuchen Sie, wie ich könnte, ich kann nicht scheinen, xterm zu verstehen, was es ist, ich will es tun.Ein neues Terminal erstellen und vim öffnen

Im Folgenden finden Sie das entsprechende Codesegment:

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); 
    } 

die Programmergebnisse in xterm Beschweren Laufen:

-e: Explizite Shell bereits war/usr/ist/vim

- e: schlechte Befehlszeilenoption "testfile"

Ich bekomme t er das Gefühl habe ich irgendwie arge vermasselt, aber ich bin verwirrt, weil läuft folgendes in einem xterm Fenster:

xterm -e vim testdat

funktioniert perfekt in Ordnung.

Bitte erleuchten Sie mich!

+0

hinzufügen 'xterm' als erstes Argument zu' argv'. – tkausl

+0

@ tkausl oh mein Schatz. Ich dachte, es wurde bereits von der Funktion behandelt. Was für ein dummer Fehler. können Sie eine kurze Antwort machen, damit ich sie annehmen und aufwerten kann? – user3109672

Antwort

1

Sie haben vergessen, xterm als erstes Argument in argv hinzuzufügen. Es mag ein bisschen seltsam erscheinen, dass Sie den Programmnamen argv hinzufügen müssen, da Sie bereits execvp mitteilen, welches Programm Sie aufrufen, aber so ist es. Weitere Informationen zu warum finden Sie in diesem kürzlich gestellte Frage auf Unix & Linux: Why does argv include the program name

Verwandte Themen