2009-03-27 7 views
7

Un tel programme qui utilise une fonction d'attente comme celui-ci est celui-ci:Signification d'attente ((int *) 0)

#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; 
} 
+0

Si seulement l'exemple de code avait quelque chose à voir avec les threads. –

+0

@Sean - avez-vous manqué l'appel fork()? – tvanfosson

+0

Non. Je le vois. Toujours n'a rien à voir avec les discussions. –

Répondre

3

La réponse de stager est correcte. Bien qu'il soit à noter que la distribution est entièrement inutile puisque selon la norme, 0 utilisé dans un contexte de pointeur est le pointeur NULL.

11

Voir man wait(2).

wait((int *)0) appels waitpid(-1, (int *)0, 0). La page de manuel indique:

Si l'état n'est pas NULL, wait() et waitpid() stockent les informations d'état dans l'int vers lequel elles pointent.

Ici, status est NULL (0). Ainsi, votre appel au wait attend un changement d'état dans tout processus enfant et ne renvoie pas de statut. L'appel vérifie simplement si un changement d'état s'est produit pour un processus enfant spécifique (pid dans votre cas).

Questions connexes