Pregunta

Uno de estos programas que utiliza una función de espera de este tipo es la siguiente:

#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; 
}   
¿Fue útil?

Solución

La respuesta del servidor de ensayo es correcta. Aunque cabe señalar que el elenco es totalmente innecesario ya que de acuerdo a la norma, 0 se usa en un contexto puntero es el puntero nulo.

Otros consejos

hombre espera (2) .

wait((int *)0) llama waitpid(-1, (int *)0, 0). Los estados página del manual:

  

Si el estado no es NULL, wait () y waitpid () información de estado en la tienda de int a la que apunta.

Aquí, status es NULL (0). Por lo tanto, su llamada a wait espera un cambio de estado en cualquier proceso hijo, y no devuelve un estado. La llamada simplemente comprueba para ver si se produjo un cambio de estado de un proceso hijo específica (pid en su caso).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top