2016-03-20 12 views
0

Ich bin neu in der Systemprogrammierung in C. Ich möchte Code nach der exec * -Funktionsfamilie ausführen, aber ich weiß nicht, wie genau.Code ausführen nach exec * Funktionsfamilie

Ich habe gelesen, dass ich fork, dann versuchen muss, Code nach der exec * -Funktion auszuführen. Ich habe meinen Prozess verzweigt, aber der Code nach der exec * -Funktion funktioniert immer noch nicht.

Hier ist mein Code so weit:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main(int argc,char *argv[]){ 

printf("Programme de manipulation de recouvrement en C\n\n"); 
int status,infoStats; 
pid_t processusFils; 

//Usage du programme 
if(argc == 1){ 
    printf("USAGE : %s args1 ... argN \n\n",argv[0]); 
    exit(1); 
} 

processusFils = fork(); 
if(processusFils < 0){ 
    perror("Erreur fork du processus fils "); 
    exit(1); 
} 
if(processusFils == 0){ 

    execvp(argv[1],argv+1); 

    exit(0); 

} 

printf("Hello world \n"); 
return 0; 
} 

Jede Idee, bitte? Vielen Dank

+0

Ich nehme an, Sie meinen die 'printf' nicht funktioniert, weil die' exit (0); 'etwas sinnlos. Egal, was du hier gepostet hast, funktioniert für mich. – WhozCraig

+0

@WhozCraig, ja das ist was ich meine; Die printf-Anweisung funktioniert nach dem Aufruf der exec-Funktion nicht. –

+0

Haben Sie eine Idee, wie kann ich es bitte machen? –

Antwort

0

Nach mehreren Änderungen, hier ist die richtige Antwort, wenn jemand es brauchen wird.

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main(int argc,char *argv[]){ 

printf("Programme de manipulation de recouvrement en C\n\n"); 
int nombre1,nombre2; 
pid_t processusFils; 

//Usage du programme 
if(argc == 1){ 
    printf("USAGE : %s args1 ... argN \n\n",argv[0]); 
    exit(1); 
} 


processusFils = fork(); 
wait(NULL); 
if(processusFils < 0){ 
    perror("Erreur fork du processus fils "); 
    exit(1); 
} 
if(processusFils == 0){ 
    execvp(argv[1],argv+1); 
    exit(0); 

} 
printf("Hello world \n"); 

return 0; 
} 

Wir müssen nur eine Wartezeit (NULL) hinzufügen, so dass wir auf die Beendigung des "Kindprozesses" warten. Danach ist es der Elternteil, der die Ausführung des Codes fortsetzen wird.

Viel Glück

Hajar

+0

Wenn Sie den Rückgabewert von 'wait()' überprüfen möchten, hätten Sie bemerkt, dass 'wait()' '' '' 'into' 'child' 'keine gute Idee ist. – EOF

+0

@EOF: Das ist, was ich suche. Warten auf das Kind, und dann wird der "Elternprozess" die Ausführung des Codes fortsetzen. Das, was ich in meinem Beispiel suche, spreche ich nicht im Allgemeinen oder gebe eine allgemeine Lösung. –

+0

Nein, Sie sind auch 'wait() 'in * im Kind *. Da das Kind keine eigenen Kinder hat, gibt das 'wait()' im Kind einen Fehler zurück, den Sie ignorieren. Das ist kein gutes Design. – EOF

Verwandte Themen