
FAQ CConsultez toutes les FAQ
Nombre d'auteurs : 28, nombre de questions : 175, création le 11 janvier 2013
Sommaire→Divers→Gestion des processusLes fonctions de la famille exec (qui sont standardisées par POSIX) permettent de charger puis de lancer un nouveau processus. Le nouveau processus est placé dans la mémoire précédemment occupée par l'ancien processus.
#include <stdio.h>
#include <unistd.h> /* <process.h> sous DOS/Windows */
#include <string.h>
int main(void)
{
char path[256], *p, *argv[2];
printf("Tapez le chemin vers le programme a executer : ");
fgets(path, sizeof(path), stdin);
if ((p = strchr(path, '\n')) != NULL)
*p = '\0';
argv[0] = path;
argv[1] = NULL;
execv(path, argv);
printf("La fonction execv a echoue.\n");
return 0;
}
Si vous avez un compilateur C/C++ moderne et que vous êtes sous Windows, préférez les noms _exec* (par exemple _execv) aux noms POSIX exec* sauf si vous voulez avoir un code unique pour les deux systèmes.
Lien : Que signifie l'underscore (_) en début du nom d'une fonction ou d'une macro, etc. ?
Sur les systèmes de type UNIX, à l'aide de fork + exec et sous DOS/Windows, à l'aide de spawn (ou directement avec l'API CreateProcess).
Avec un compilateur C/C++ moderne, préférez les noms spawn* aux anciens noms spawn*.
fork permet à un processus de se dupliquer en 2 processus exactement identiques sur le prochain code à exécuter, sur les valeurs des variables
(ceci inclut aussi le gestionaire de signaux) mais pas sur les locks mémoires, les compteurs de temps ou sur les signaux en attente.
#include <stdio.h>
#include <unistd.h>
int main(void)
{
pid_t pid = fork();
/* Le deuxieme processus reprend à partir d'ici. */
if (pid == -1) {
/* Erreur */
} else if (pid == 0) {
/* On est dans le fils. */
/* Il ne reste plus qu'a faire un exec pour charger le processus qu'on veut executer. */
} else {
/* On est dans le pere. */
/* On peut attendre la fin du processus fils avant de continuer a l'aide de la fonction waitpid. */
}
return 0;
}
Sous Windows (_P_WAIT n'étant pas définie sous DOS ...) :
#include <stdio.h>
#include <process.h>
int main(void)
{
const char * argv[] = {"hello", NULL};
printf("Bonjour.\n");
_spawnvp(_P_WAIT, "hello.exe", argv); /* Attendre la fin de hello.exe avant de continuer. */
printf("Au revoir.\n");
return 0;
}
Lien : Que signifie l'underscore (_) en début du nom d'une fonction ou d'une macro, etc. ?
Lien : L'API CreateProcess (Windows)



