Significato di attesa ((int *) 0)
Domanda
Uno di questi programmi che utilizza una funzione di attesa di questo tipo è questa:
#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;
}
Soluzione
La risposta di Stager è corretta. Anche se va notato che il cast è del tutto inutile in quanto secondo lo standard, 0 utilizzato in un contesto puntatore viene il puntatore NULL.
Altri suggerimenti
wait((int *)0)
chiama waitpid(-1, (int *)0, 0)
. La pagina di uomo afferma:
Se lo stato non è NULL, wait () e waitpid () informazioni sullo stato negozio nel int a cui punta.
Qui, status
è NULL (0). Così, la chiamata a wait
attende un cambiamento di stato, in ogni processo figlio, e non restituisce uno stato. La chiamata controlla semplicemente per vedere se si è verificato un cambiamento di stato per uno specifico processo figlio (pid
nel tuo caso).