Foros del Web » Programación para mayores de 30 ;) » C/C++ »

duda programa en c

Estas en el tema de duda programa en c en el foro de C/C++ en Foros del Web. Pues me piden esto: Realizar un programa, en lenguaje C, que implemente una comunicación bidireccional simultánea entre dos procesos (padre e hijo) pidiendo entrada de ...
  #1 (permalink)  
Antiguo 10/06/2007, 11:08
 
Fecha de Ingreso: febrero-2007
Mensajes: 15
Antigüedad: 17 años, 2 meses
Puntos: 0
duda programa en c

Pues me piden esto:
Realizar un programa, en lenguaje C, que implemente una comunicación
bidireccional simultánea entre dos procesos (padre e hijo) pidiendo entrada de datos
mediante teclado.
● Cuando uno de los procesos reciba la cadena de caracteres FIN debe enviar una señal
SIGTERM al otro proceso.
● El proceso que recibe la señal SIGTERM debe enviar al otro una última comunicación
con el número de caracteres leídos a lo largo de toda la comunicación y morirse.
● El proceso que sigue vivo debe mostrar el dato enviado por el otro proceso y morirse.
  #2 (permalink)  
Antiguo 10/06/2007, 11:09
 
Fecha de Ingreso: febrero-2007
Mensajes: 15
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: duda programa en c

y yo lo he hecho así y me han dicho que está mal,¿me podeis decir que está mal?
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#define MAX 256
int tuberia[2];
int pid;
char mensaje[MAX];
/*Lee de la tuberia el mensaje*/
void leo(int sig)
{
read(tuberia[0],mensaje,MAX); //Lee de la tuberia
if (strcmp(mensaje, "FIN\n") != 0) //Si no es fin, se lo envia al hijo
{
printf("MENSAJE:%s\n ",mensaje); //El usuario escribe le mensaje
fgets(mensaje,sizeof(mensaje),stdin);
write(tuberia[1],mensaje,strlen(mensaje) + 1);
kill(pid,SIGTERMR1);
}
else
{
kill(getpid(),SIGTERMR2);
kill(pid,SIGTERMR2);
}
}
/*Lee de la tuberia el mensaje que le envia el padre*/
void leohijo(int sig)
{
read(tuberia[0],mensaje,MAX); //El hijo lee el mensaje
if (strcmp(mensaje,"FIN\n") != 0) //Si el mensaje no es FIN lee el mensaje y le dice al padre que esta leido
{
printf("LEO: %s\n",mensaje);
fgets(mensaje,sizeof(mensaje),stdin);
write(tuberia[1],mensaje,strlen(mensaje)+1);
kill(getppid(),SIGTERMR1);
}
else
{
kill(getppid(),SIGTERMR2); //envia al padre la señal SIGTERMR1
kill(getpid(),SIGTERMR2); //se envia a si mismo la señal SIGTERMR2
}
}
void muerohijo(int sig)
{
printf("HIJO MUERE\n");
/*Cierra la tuberia por el lado de escribir y el de leer*/
close(tuberia[1]);
close(tuberia[0]);
exit(0);
}

void muero(int sig)
{
printf("padre muere");
/*Cierra la tuberia por el lado de escribir y el de leer*/
close (tuberia[0]);
close(tuberia[1]);
exit(0);
}
main()
{

signal(SIGTERMR1,leo);
signal (SIGTERMR2,muero);
/*Creación de las tuberias de comunicacion*/
if (pipe (tuberia) == -1)
{
printf("ERROR PIPE");
exit(-1);
}
switch (pid = fork())
{
case -1:{
printf("ERROR FORK");
exit(-1);
}
/*Creacion del proceso hijo*/
case 0:{
signal(SIGTERMR1,leohijo);
signal(Sigterm2,muerohijo);
while(1);
}
/*Codigo del proceso padre*/
default:{
fgets(mensaje,sizeof(mensaje),stdin);//Coje la cadena escrita, y la guarda en
mensaje
write(tuberia[1], mensaje, strlen(mensaje)+1);//Escribe el mensaje en la tuberia
kill(pid,SIGTERMR1);//Se lo envia a si mismo para tratarlo
while(1);
}
}
  #3 (permalink)  
Antiguo 10/06/2007, 17:36
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Re: duda programa en c

La verdad que flojera leer todo esto.....
  #4 (permalink)  
Antiguo 12/06/2007, 10:15
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: duda programa en c

Segun me enseñaron en la facultad te puedo decir que:

Debes registrar las señales
que tipo de señales son SIGTERMR1 y SIGTERMR2?yo jamas las habia oido
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:56.