Frage

Ich schreibe ein C-Programm unter Linux.

Ich habe einen Prozess erstellt und ihn gegabelt, um ein Kind zu erstellen.Ich möchte ein anderes Programm in diesem Kind ausführen, also benutze ich execlp.Dieses Programm muss jedoch in einem unabhängigen Fenster ausgeführt werden.

if ( (execlp("xterm","xterm","-e","./Child1", "127.0.0.1", (char *) 0)) < 0)  {
  printf("Failed to Start the Echo Client. Exiting application.");
  return 1;
}

Child1.c ist ein einfaches Programm, das sich im selben Verzeichnis wie meine aktuelle Datei befindet.

Bei der Ausführung läuft der Code einwandfrei, wenn das xterm-Fenster angezeigt wird, aber ich erhalte eine Fehlermeldung "xterm: Can't execvp: No file or directory"

Können Sie mir bitte eine Lösung vorschlagen?

War es hilfreich?

Lösung

Ihr System hat möglicherweise keine xterm installiert (oder der Benutzer hat eine falsche PATH).Sie könnten die Existenz von testen /usr/bin/xterm (mit z.B.der access syscall) oder etwas anderes verwenden.Zum Beispiel haben viele Debian- oder Ubuntu-Distributionen eine x-terminal-emulator (was normalerweise ein Symlink zu einem bestimmten Programm ist), den Sie anstelle von verwenden könnten xterm.

Wenn xterm startet, dann dein Programm ./Child1 existiert nicht, sollten Sie seine Existenz testen (mit access) vor.Wenn Sie nur einen Quellcode haben ./Child1.c sie sollten es vorher kompiliert haben (vielleicht durch Ausführen eines system("gcc -Wall Child1.c -o Child1") vorher und testen, dass es erfolgreich kompiliert wurde, d. h.testen Sie das system gibt 0 zurück und dass die Child1 datei existiert und ausführbar ist).

Sie sollten sich Zeit nehmen, die zu lesen xterm(1) Handbuchseite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top