comment utiliser correctement fork () et exec ()

J’ai ce code;

pid_t process; process = fork(); if (process < 0){ //fork error perror("fork"); exit(EXIT_FAILURE); } if (process == 0){ //i try here the execl execl ("process.c", "process" , n, NULL); } else { wait(NULL); } 

Je ne sais pas si cette utilisation de fork() et de exec() combinés est correcte. Lorsque j’essaie d’exécuter le programme à partir de la bash, je ne reçois aucun résultat. J’ai donc pensé que cela pourrait poser problème dans cette partie du code.
Merci.

Un problème est que

 if (process = 0){ 

Devrais lire

 if (process == 0){ 

Sinon, vous affectez zéro au process et appelez seulement execl si le result est différent de zéro (c’est-à-dire jamais).

En outre, vous essayez d’exécuter quelque chose appelé process.c . Il ne fait aucun doute que l’on pourrait avoir un exécutable appelé process.c . Cependant, les noms se terminant classiquement par .c sont atsortingbués aux fichiers de code source C. Si process.c est effectivement un fichier C, vous devez d’abord le comstackr et le lier.

Une fois que vous avez construit l’exécutable, vous devez soit le placer quelque part sur $PATH soit spécifier son chemin complet d’access à execle() . Dans de nombreux environnements Unix, le placer dans le répertoire actuel ne suffira pas.

Enfin, on ne sait pas ce que n est dans l’appel execle() , mais le nom fait allusion à une variable numérique. Vous devez vous assurer qu’il s’agit d’une chaîne et non, par exemple, un entier.

Eh bien, selon les réponses et les commentaires ci-dessus, votre code devrait ressembler à ceci:

 pid_t process; process = vfork(); //if your sole aim lies in creating a child that will ultimately call exec family functions then its advisable to use vfork if (process < 0) { //fork error perror("fork"); exit(EXIT_FAILURE); } if (process == 0) { //i try here the execl char N[MAX_DIGITS];//A correction here itoa(n,N);//write this function yourself execl ("process", "process" , N, NULL);// Here process is the name of the executable N is your original argument fprintf(stderr,"execl failed\n");//check for error in execl } else { wait(NULL); } 

Notez l’utilisation de vfork au lieu de fork.Cela serait beaucoup plus efficace.La raison pourrait être trouvée ici