Frage
Ein solches Programm, das eine Warte Funktion wie diese verwendet, ist diese:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int pid,fd[2]; int n; char line[20];
if(pipe(fd)<0) {
printf("Error creating pipe");
} else {
pid=fork();
if(pid<0) {
printf("Error while forking");
} else {
if(pid>0) {
close(fd[0]);
write(fd[1],"Hello\n",6);
while(wait((int *)0)!=pid);
} else {
close(fd[1]);
n=read(fd[0],line,20);
if(n<0)
printf("Error reading a file");
write(1,line,n);
}
}
}
return 0;
}
Lösung
stager Antwort ist richtig. Obwohl es sollte beachtet werden, dass die Besetzung, da nach der Norm völlig unnötig ist, 0 in einem Zeiger Kontext verwendet wird, ist der NULL-Zeiger.
Andere Tipps
Siehe Mann wait (2) .
wait((int *)0)
ruft waitpid(-1, (int *)0, 0)
. Die Manpage lautet:
Wenn der Status nicht NULL ist, warten () und waitpid () Speicher Statusinformationen im int, auf die sie verweist.
Hier status
ist NULL (0). Somit wartet auf Ihren Anruf wait
für eine Zustandsänderung in jedem Kind-Prozess, und keinen Status zurück. Der Anruf lediglich überprüft, ob eine Zustandsänderung für einen bestimmten Kind-Prozess (pid
in Ihrem Fall) aufgetreten ist.