Frage

Ein solches Programm, das eine Warte Funktion wie diese verwendet, ist diese:

#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; 
}   
War es hilfreich?

Lösung

stager Antwort ist richtig. Obwohl es sollte beachtet werden, dass die Besetzung, da nach der Norm völlig unnötig ist, 0 in einem Zeiger Kontext verwendet wird, ist der NULL-Zeiger.

Andere Tipps

Siehe Mann wait (2) .

wait((int *)0) ruft waitpid(-1, (int *)0, 0). Die Manpage lautet:

  

Wenn der Status nicht NULL ist, warten () und waitpid () Speicher Statusinformationen im int, auf die sie verweist.

Hier status ist NULL (0). Somit wartet auf Ihren Anruf wait für eine Zustandsänderung in jedem Kind-Prozess, und keinen Status zurück. Der Anruf lediglich überprüft, ob eine Zustandsänderung für einen bestimmten Kind-Prozess (pid in Ihrem Fall) aufgetreten ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top