Signification d'attente ((int *) 0)
Question
Un tel programme qui utilise cette fonction est d'attente comme celui-ci:
#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;
}
La solution
La réponse de stager est correcte. Bien qu'il convient de noter que le casting est tout à fait inutile, puisque selon la norme, 0 utilisé dans un contexte de pointeur est le pointeur NULL.
Autres conseils
Voir homme attente (2) .
wait((int *)0)
appelle waitpid(-1, (int *)0, 0)
. Les états de page man:
Si l'état est NULL, wait () et waitpid () informations sur l'état du magasin dans l'int auquel il fait remarquer.
Ici, status
est NULL (0). Ainsi, votre appel à wait
attend un changement d'état dans tout processus de l'enfant, et ne retourne pas de statut. L'appel vérifie simplement pour voir si un changement d'état a eu lieu pour un processus enfant spécifique (pid
dans votre cas).