Question

J'écris un programme C sous Linux.

J'ai créé un processus et je l'ai forgé pour créer un enfant.Je veux exécuter un autre programme chez cet enfant, donc j'utilise execlp.Mais ce programme doit s’exécuter dans une fenêtre indépendante.

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 est un programme simple qui se trouve dans le même répertoire que mon fichier actuel.

Lors de l'exécution, le code fonctionne correctement avec la fenêtre xterm qui s'affiche mais j'obtiens une erreur "xterm: Can't execvp: No file or directory"

Pouvez-vous s'il vous plaît me suggérer une résolution?

Était-ce utile?

La solution

Votre système n'a peut-être pas de xterm installé (ou l'utilisateur a un mauvais PATH).Vous pourriez tester l'existence de /usr/bin/xterm (avec par ex.le access syscall), ou utilisez autre chose.Par exemple, de nombreuses distributions Debian ou Ubuntu ont un x-terminal-emulator (qui est généralement un lien symbolique vers un programme précis) que vous pouvez utiliser à la place de xterm.

Si xterm se déclenche, puis votre programme ./Child1 n'existe pas, vous devez tester son existence (avec access) avant.Si vous n'avez qu'un code source ./Child1.c vous auriez dû le compiler avant (peut-être en exécutant un system("gcc -Wall Child1.c -o Child1") avant et tester qu'il a été compilé avec succès, c'est-à-direteste ça system renvoie 0 et que le Child1 le fichier existe et est exécutable).

Vous devriez prendre le temps de lire le xterm(1) page de manuel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top