FAQ CConsultez toutes les FAQ
Nombre d'auteurs : 35, nombre de questions : 194, dernière mise à jour : 18 février 2018 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de www.developpez.com et de l'expérience personnelle des auteurs.
Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci .
Sur ce, je vous souhaite une bonne lecture.
Les 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.
Code c : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #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; } |
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 deux processus exactement identiques sur le prochain code à exécuter, sur les valeurs des variables (ceci inclut aussi le gestionnaire de signaux), mais pas sur les locks mémoire, les compteurs de temps ou sur les signaux en attente.
Code c : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> #include <unistd.h> int main(void) { pid_t pid = fork(); /* Le deuxième processus reprend à partir d'ici. */ if (pid == -1) { /* Erreur */ } else if (pid == 0) { /* On est dans le fils. */ /* Il ne reste plus qu'à faire un exec pour charger le processus qu'on veut exécuter. */ } else { /* On est dans le père. */ /* On peut attendre la fin du processus fils avant de continuer à l'aide de la fonction waitpid. */ } return 0; } |
Code c : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #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; } |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.