Beruflich Dokumente
Kultur Dokumente
uiopasdfghjklzxcvbnmqwertyuiopasd
fghjklzxcvbnmqwertyuiopasdfghjklzx
cvbnmqwertyuiopasdfghjklzxcvbnmq
Tuberias
wertyuiopasdfghjklzxcvbnmqwertyui
Tuberías
opasdfghjklzxcvbnmqwertyuiopasdfg
11/03/2008
hjklzxcvbnmqwertyuiopasdfghjklzxc
vbnmqwertyuiopasdfghjklzxcvbnmq
wertyuiopasdfghjklzxcvbnmqwertyui
opasdfghjklzxcvbnmqwertyuiopasdfg
hjklzxcvbnmqwertyuiopasdfghjklzxc
vbnmqwertyuiopasdfghjklzxcvbnmq
wertyuiopasdfghjklzxcvbnmqwertyui
opasdfghjklzxcvbnmqwertyuiopasdfg
hjklzxcvbnmrtyuiopasdfghjklzxcvbn
mqwertyuiopasdfghjklzxcvbnmqwert
yuiopasdfghjklzxcvbnmqwertyuiopas
Tuberias
Tras esto cada hijo calculará su parte y retornará al padre dicho cálculo mediante la
tubería asignada.
Por último el padre une todos los cálculos de los hijos y calcula el total.
Variables utilizadas
pid=1: Con esta variable recogemos el pid de los procesos hijos que vamos creando en
el Fork(). Después nos sirve al final del programa para controlar los hijos que van
terminando.
n: Nos sirve para recoger el argumento pasado por la línea de comandos al programa,
concretamente el argumento correspondiente al número de factorial.
nprocesos: Nos sirve para recoger el argumento pasado por la línea de comandos al
programa, concretamente el argumento correspondiente al número de procesos hijos
para calcular el factorial.
tot=0: En esta variable guardamos el total calculado por los procesos hijos. Esta
variable es la que se mandará posteriormente por la tubería de hijo a padre y este último
va calculando el total con todas las recibidas.
totp=1: Variable que guarda el total del factorial.
numero: Nos sirve para realizar una copia de “n” y luego llevar un contador en el
proceso padre, para controlar la terminación de los hijos.
n = atoi(argv[1]);
nprocesos = atoi (argv[2]);
/*guardo los argumentos pasados por la línea de comandos y los transformo a número*/
numero = n;
n+=2;
//n va marcando a cada hijo los multiplos a calcular por los hijos
switch (pid){
case -1: perror ("Error al creas proceso\n");
exit(1);
case 0:
if (i == nprocesos){
//sucede cuando no hay mas procesos
close(tuberia[i][0]);
//cierro la tuberia que no voy a usar
int to,num=0;
num = n;
to = n * n-1;
n-=2;
close (tuberia[i][1]);
read (tuberia[i][0],&tot,sizeof(int));
totp = totp * tot;
printf ("Hijo con PID, %i calculó el producto de los numeros %i,%i y
retornó el valor %i\n", pid,numero,numero-1,tot);
close (tuberia[i][0]);
numero-=2;
}
}
printf ("Resultado total del factorial: %i\n",totp);
return 0;
}