Significado de espera ((int *) 0)
Pergunta
Um tal programa que usa uma função de espera como este é esta:
#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;
}
Solução
resposta
O stager está correto. Embora deve-se notar que o elenco é totalmente desnecessária, já que de acordo com o padrão, 0 usado em um contexto ponteiro é o ponteiro NULL.
Outras dicas
wait((int *)0)
chama waitpid(-1, (int *)0, 0)
. A página man estados:
Se o estado não é NULL, wait () e waitpid informações de status store () no int para o qual ele aponta.
Aqui, status
é NULL (0). Assim, a sua chamada para wait
espera por uma mudança de estado em qualquer processo filho, e não retorna um status. A chamada meramente verifica para ver se uma mudança de estado ocorrido por um processo filho específico (pid
no seu caso).
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow