Linux - fork()

   
Vista:

fork()

Publicado por Principiante (1 intervención) el 30/05/2012 03:31:46
Hola que tal la pregunta es: Se puede cargar una variable con un valor en el padre y usar ese valor en el proceso hijo ? Estoy usando semáforos, pero el hijo no reconoce el valor cargado desde el padre, el código es algo por el estilo

Desde ya muchas gracias....

Programa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <sys/types.h> 
#include <stdio.h> 
#include <semaphore.h>
....
etc
 
sem_t *sem_cont, *sem_free;
int k;
...
etc
 
main()
{
 
      if((sem_cont=sem_open("/sem_cont ",  O_CREAT, 0644, 0)) ==(sem_t*)-1)
           perror("Error al crear semaforo 1\n");
 
      if((sem_free=sem_open("/sem_free", O_CREAT, 0644, 1)) ==(sem_t*)-1)
           perror("Error al crear el semáforo 2\n");
 
      switch(fork())
      {
               case -1:
                     perror("No se puede crear procesos");
               case 0:
                           /* HIJO */
                          sem_wait(sem_cont)    /* Acá se bloquea porque el semaforo esta inicilizado en 0 */
                              printf("Soy el proceso hijo\n");
                              /* Ahora que el padre actualizó la variable la quiero imprimir desde el hijo */
                              printf("valor de la varianle: %d\n", k)
 
                default:
                          /* PADRE */
                         sem_wait(sem_free) /* esto se ejecuta porque el semaforo esta inicializado en 1 */  
                             printf("Soy el proceso padre\n");
                             k = 99; /* actualizo una variable para que la use el hijo */
                         sem_post(sem_cont) /* esto es para que se ejecute el hijo */
 
                  .....
                        cerramos semáforos...etc.
                         wait(0);
                  ....
 
       }
 
   exit(0);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

fork()

Publicado por Tom (344 intervenciones) el 31/05/2012 19:31:04
Bueno ... en la página man de fork() lo menciona, y en la mayoria de tutoriales también:

"The child does not inherit semaphore adjustments from its parent (semop(2))."

Aquí tienes un ejemplo viejillo, pero ilustrativo:

http://www.cs.cf.ac.uk/Dave/C/node26.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar