Läuft ein C-Programm mit execlp()?
Also ich habe ein c-Programm namens "Hallo.c", die nichts tut, aber "exit(2)" am Ende. Und ich habe versucht zu laufen, in mein Kind-Prozess, und übergeben Sie den Rückgabewert an meine Eltern zu verarbeiten und drucken Sie die entsprechenden Nachrichten. Aber irgendwie hat das Programm immer beenden auf 0, und drucken Sie die "exit 0" angezeigt. Kann mir jemand sagen warum?
pid_t pid;
int status;
pid = fork();
if (pid == -1){
perror("fork");
exit(1);
}
if (pid >0){
/*abusive parents*/
waitpid(pid, &status, 0);
if(WEXITSTATUS(status)==3){
printf("exit at 3\n");
}
if(WEXITSTATUS(status)==2){
printf("exit at 2\n");
}
if(!(WEXITSTATUS(status))){
printf("exit at 0\n");
}
}
else{
/*stupid child*/
execlp("hello.c",NULL);
}
return 0;}
Hier ist die Hallo.c:
int main(void){
int teemo=0;
exit(2);
}
- Sie laufen nicht ein C-Programm führen Sie die kompilierte ausführbare Datei... So
execlp("hello.c",NULL)
sollteexeclp("hello.bin",NULL)
- Noch immer 0 obwohl. Muss ich kompilierte c-Programm zuerst?
- Wenn Sie eine IDE, ich schlage vor, Sie aufhören, es für eine Weile und zum Kommandozeilen-tools. Dies sollte Ihnen helfen erwerben einige relevante intuition.
Du musst angemeldet sein, um einen Kommentar abzugeben.
(Nicht nur) um besser zu verstehen, was happeing in Ihrem code, Fehlerprüfung hinzufügen.
In Ihrem speziellen Fall hinzufügen, dass es mindestens, um den Anruf zu
execlp()
. Zu tun, so muss man zuerst einen Blick aufexec*()
s-Dokumentation:Und dann verbessern Sie Ihre code-Abdeckung in diesem Fall:
Werden Sie Beobachter eine Fehlermeldung über den Aufruf
execlp()
.Diese Gebühren zu
hello.c
wohl nicht ausführbare, aber eine gewöhnliche text-Datei, C-Quelle.Blick auf die Dokumentation näher man liest:
Daraus lernen wir, dass ein Aufruf der
execl*()
Mitglieder derexec*()
Familie von Funktionen ist immer so enden:Kann nicht ausgeführt werden, eine C-Quellcode Datei, die Sie brauchen, um zu kompilieren (und link) zum generieren einer ausführbaren Datei, und diese Datei ausführen. Daher sollten Sie etwas tun, wie
Kompilieren
hello.c
ersten (ich nehme an, Sie sind mitgcc
)Runing
hello
in Ihrem ersten Programm wie diesesDann sollten Sie bekommen, was Sie erwartet.
Nur hinzufügen, warum seine Rückkehr zero immer in diesem Fall
Dies ist, weil, wenn execlp scheiterte und die Rückgabe -1, parent-Prozess war mit Rückgabewert am Ende der main-Funktion, d.h. in diesem Fall 0. Wenn Sie dies ändern, um 2 oder 3 sehen Sie das Programm schlagen, code mit, wenn check ==3 oder ==2.