Hola a todos!
Apelo a la sabiduria de ustedes para ver si me ayudan a resolver el siguiente problemita.
Bien, digamos que tengo un vector de tipo int llamado televisores, que tiene un numero, 0 si el tele esta apagado y 1 si el tele esta prendido.
Mi meta es que un proceso hijo, que hereda esta matriz del padre, modifique el estado de uno o mas televisores, y que el padre se "entere" de las modificaciones, y por lo tanto actualice su vector de televisores.
Para lograr todo esto creo que deberia usar señales y pipes, mediante el pipe transfiero la informacion necesaria del proceso hijo al proceso padre, y por señales le aviso al padre que deberia leer del pipe para saber que datos modificar y cual sera el nuevo estado.
El "protocolo" con el que se leera del pipe el numero de vector a modificar y el nuevo estado, por ejemplo, si quisiera avisar que prendi el televisor numero 5, mediante el pipe mandaria 5-1
Hasta ahora parece facil, pero se me complica a la hora de atender la señal, puesto que no encontre la forma de que un manipulador de señales reciba varios argumentos, en esta caso necesita recibir el vector de televisores para ser modificado y el descriptor del pipe.
A continuacion les pego el codigo que uso;
******************************
******************************
******************************
#include <stdio.h>
#include <signal.h>
typedef void (*funcPtr)();
void cambiarEstado( int **televisores,int *descriptorPipe )
{
//lee desde el descriptorPipe
//obtiene el numero de vector a modificar y el nuevo estado
//modifica el vector y listo
}
int main()
{
int televisores[10],descriptorPipe[2],i,pidPadre;
//iniciamos los televisores como apagados
for(i=0; i<10; i++)
televisores[i]=0;
//cargamos el controlador de señal
signal( 12 , (funcPtr)cambiarEstado(&televisores,descriptorPipe));
//creamos un nuevo proceso
if (!fork())
{
//obtenemos pids para usar en señales entre ads padre y ads hijo
pidPadre=getppid();
//prendemos un televisor
FILE *stream;
stream = fdopen (descriptorPipe[1], "w");
fprintf (stream, "%d-%d",5,1);
fclose (stream);
//mandamos la señal indicando que prendimos un tele y es necesario actualizar la matriz
kill(pidPadre, 12);
}
for(i=0; i<10; i++)
printf("televisor %d, estado: %d\n",i,televisores[i]);
}
******************************
******************************
******************************
Si algun alma bondadosa podria guiarme se lo agradeceria.
Saludos, Eugenio