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; 
}   
Foi útil?

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

homem de espera (2) .

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
scroll top