miércoles, 21 de septiembre de 2011

Programa de arbol




#include
#include
#include
#include
#include
#include

int main (void) {

/**ATENCIÓN: Declaración de variables del programa a probar. Es sólo un exemplo**/
int i;
int n = 4;
int childpid;

/**El resto de variables son para que la presentación de los resultados por pantalla sea posible**/

int a, p;
int ret;
FILE *fpipe;
char comanda[50]; /*String dónde se guarda el comando a ejecutar por el 1r hijo*/
char line[256];
p = getpid();

sprintf(comanda,"pstree -n -p %d\n",getpid()); /*Concatenamos el comando pstree con el pid del padre*/

ret = fork();

if (ret == 0) { /*Este es el primer hijo del padre*/
if ( !(fpipe = (FILE*)popen(comanda,"r")) ) { /* Si el pipe falla*/
perror("Problemas con el pipe!!!");
exit(1);
}
while ( fgets( line, sizeof line, fpipe))
{
printf("%s", line); /*Escribimos por pantalla lo que retorna el hijo. La salida del pstree*/
}
pclose(fpipe);


} else {
/*El primer hijo sólo se crea para hacer un pstree y poder ver por pantalla */
/*el árbol de procesos generado*/

/*El código que viene a continuación, lo podéis substituir por lo que se tercie*/
/*¡¡Las variables han de ir declaradas arriba!!!*/


for (i = 1; i < n; i++) {
if ((childpid = fork()) == -1) {
break;
}
fprintf(stderr, "Este es el proceso %ld com padre %ld\n", (long)getpid(), (long)getppid());
}
sleep(1); /*Es sólo para dar tiempo a terminar a todos los hijos*/

}
exit(0);
}



¿Por que aparecen los mensajes repetidos?
R=para que muestren mensajes repetidos el truco es aprovechar que la función fork, que permite crear nuevos procesos, copia todo el proceso del llamador. Y eso incluye a los file descriptors del pipe, pero el pipe no se duplica Y esto da como resultado que si el padre escribe en p[1], el hijo puede leer en p[0], o viceversa.

2.- ¿Que observas?
R=primer proceso termine de procesar para que el otro comienze es decir son procesos completamente independientes y corren al mismo tiempo

3.- ¿Por que ?
Un pipe puede ser más útil en el caso de comunicar un proceso padre con un proceso hijo y se pueden usarse para leer y escribir bytes

No hay comentarios:

Publicar un comentario