Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/06/2007, 11:09
alex500
 
Fecha de Ingreso: febrero-2007
Mensajes: 15
Antigüedad: 17 años, 3 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);
}
}