2009-03-27 19 views
7

Ein solches Programm, das eine Warte Funktion wie diese verwendet, ist diese:Bedeutung der wait ((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

Wenn nur der Beispielcode etwas mit Threads zu tun hatte. –

+0

@Sean - hast du den fork() Anruf verpasst? – tvanfosson

+0

Nein. Ich sehe es. Hat immer noch nichts mit Threads zu tun. –

Antwort

3

Die Antwort des Stagers ist korrekt. Es sollte jedoch angemerkt werden, dass die Umwandlung völlig unnötig ist, da gemäß dem Standard 0 in einem Zeigerkontext der NULL-Zeiger verwendet wird.

11

man wait(2) See.

wait((int *)0) ruft waitpid(-1, (int *)0, 0). Die Manpages-Status:

Wenn Status nicht NULL ist, wait() und waitpid() speichern Statusinformationen in dem Int, auf den es zeigt.

Hier ist status NULL (0). Daher wartet Ihr Aufruf an wait auf einen Statuswechsel in einem unterordneten Prozess und gibt keinen Status zurück. Der Aufruf überprüft lediglich, ob eine Statusänderung für einen bestimmten untergeordneten Prozess aufgetreten ist (pid in Ihrem Fall).