Significado de espera ((int *) 0)
Pregunta
Uno de estos programas que utiliza una función de espera de este tipo es la siguiente:
#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;
}
Solución
La respuesta del servidor de ensayo es correcta. Aunque cabe señalar que el elenco es totalmente innecesario ya que de acuerdo a la norma, 0 se usa en un contexto puntero es el puntero nulo.
Otros consejos
wait((int *)0)
llama waitpid(-1, (int *)0, 0)
. Los estados página del manual:
Si el estado no es NULL, wait () y waitpid () información de estado en la tienda de int a la que apunta.
Aquí, status
es NULL (0). Por lo tanto, su llamada a wait
espera un cambio de estado en cualquier proceso hijo, y no devuelve un estado. La llamada simplemente comprueba para ver si se produjo un cambio de estado de un proceso hijo específica (pid
en su caso).