Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/11/2010, 04:36
Avatar de oscarsb1988
oscarsb1988
 
Fecha de Ingreso: abril-2010
Mensajes: 40
Antigüedad: 14 años
Puntos: 0
Mensaje Procesos C - Linux

Un proceso padre tiene que generar dos procesos hijos.

El padre tiene que leer los datos de stdin ( por teclado) y tiene que enviarlos a los hijos.

El hijo 1: -Sacará por pantalla el texto leído del padre, a la salida estándar.
El hijo 2: -Sacará lo leído a un fichero.

Cuando el padre reciba “exit” como entrada, enviará señales de terminación a los hijos y se cerrará.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <sys/types.h>
  5. #include <sys/wait.h>
  6.  
  7. void proceso_1()
  8. {
  9.                printf ("Somos el primogénito\n");
  10.                printf (pal);
  11.                sleep(1);
  12.                exit(0);
  13. }
  14.  
  15. void proceso_2()
  16. {
  17.                printf ("Somos el segundo...\n");
  18.                sleep(5);
  19.                exit(0);
  20. }
  21.  
  22. int main()
  23. {
  24.  
  25.     pid_t hijo1;
  26.     pid_t hijo2;
  27.     int faltan;
  28.     int status;
  29.     pid_t cambiado;
  30.     char pal;
  31.  
  32.     hijo1 = fork();
  33.  
  34.     if (hijo1 == 0)
  35.     {
  36.         proceso_1();
  37.     }
  38.        elseif (hijo1 > 0)
  39.        {        
  40.         printf ("Proceso padre, a por otro hijo\n");
  41.         printf( "Introduzca una palabra: " );
  42.         scanf( "%c", &pal );
  43.        }
  44.  
  45.        hijo2 = fork();
  46.  
  47.     if (hijo2==0)
  48.         {
  49.         proceso_2();
  50.         }  
  51.         else
  52.         {
  53.         faltan = 2;
  54.  
  55.     do
  56.         {
  57.         cambiado = wait(&status);
  58.        
  59.                 if (WIFEXITED(status))
  60.                 {
  61.                 faltan--;
  62.                
  63.                                 if(cambiado == hijo1)
  64.                                 {
  65.                     printf("Termina el hijo1\n");
  66.                     else if (cambiado == hijo2)
  67.                     printf("Termina el hijo2\n");
  68.                     }
  69.                 }
  70.        } while (faltan > 0);
  71.     }
  72. }

Esta es la idea inicial... Obviamente se acerca a como debería de ser el código final pero todavía hay que editar bastante...

Un saludo y espero vuestras ideas para llevar todo esto a buen puerto :P

Edit1: Me comentan que es mejor hacerlo utilizando pipe() en vez de fork()

Última edición por oscarsb1988; 27/11/2010 a las 05:27