Question

Un tel programme qui utilise cette fonction est d'attente comme celui-ci:

#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; 
}   
Était-ce utile?

La solution

La réponse de stager est correcte. Bien qu'il convient de noter que le casting est tout à fait inutile, puisque selon la norme, 0 utilisé dans un contexte de pointeur est le pointeur NULL.

Autres conseils

Voir homme attente (2) .

wait((int *)0) appelle waitpid(-1, (int *)0, 0). Les états de page man:

  

Si l'état est NULL, wait () et waitpid () informations sur l'état du magasin dans l'int auquel il fait remarquer.

Ici, status est NULL (0). Ainsi, votre appel à wait attend un changement d'état dans tout processus de l'enfant, et ne retourne pas de statut. L'appel vérifie simplement pour voir si un changement d'état a eu lieu pour un processus enfant spécifique (pid dans votre cas).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top