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; 
}   
È stato utile?

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

uomo wait (2) .

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top