¡Hola!
Este es el ejercicio que tengo que hacer:
Ejecutar un programa (servidor clave) que accede a una tabla de 100 elementos que a través de otro programa mande la clave con buzones y si la clave no coincide responde con un mensaje de que no coincide y se termina el programa.
Si la clave es correcta, el servidor crea un hijo y ese hijo le manda al programa 'Clave' un mensaje de OK. Por tanto 'Clave' ya puede dar de alta, baja o hacer una consulta en la tabla; se la manda a hijo y éste actualiza la tabla. El hijo se crea para contestar al cliente que pide altas, bajas, consulta y modificar.
De momento llevo hecho esto:
#include<stdio.h>
#include<stdlib.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>
#include "datos.h"
void pedir(int buzon);
main() {
t_mensaje mensaje;
// CREAR BUZON
int id_buz;
if((id_buz= msgget(CLAVE,IPC_CREAT | 0660))==-1) {
printf("ERROR EN LA CREACION DEL BUZON\n");
exit(1);
}
else {
pedir(id_buz);
}
}
//************************FUNCION SPEDIR CLAVE************************************
void pedir(int buzon) {
t_mensaje mensaje;
int longitud;
printf("\nIntroduce posible clave: ");
scanf("%d", &mensaje.contenido);
mensaje.remite = 1;
msgsnd(buzon,&mensaje,longitud,0);
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>
#include "datos.h"
void servidor(int buzon);
main() {
t_mensaje mensaje;
// CREAR BUZON
int id_buz;
if((id_buz= msgget(CLAVE,IPC_CREAT | 0660))==-1) {
printf("ERROR EN LA CREACION DEL BUZON\n");
exit(1);
}
else {
servidor(id_buz);
}
}
//************************FUNCION SERVIDOR************************************
void servidor(int buzon) {
t_mensaje mensaje;
int longitud,, p;
longitud=sizeof(t_mensaje)-sizeof(long);
while(1)
{
msgrcv(buzon,&mensaje,longitud,1,IPC_NOWAIT;
if(mensaje.contenido == 25) //es la clave que necesita para ejecutar
{
p=fork();
if(p == 0)
{
mensaje.palabra = "OK";
mensaje.id = 2;
msgsnd(buzon,&mensaje,longitud,0);
exit();
}
msgrcv(buzon,&mensaje,longitud,2,IPC_NOWAIT;
if(mensaje.palabra == "OK")
{
mensaje.id = 3;
msgsnd(buzon,&mensaje,longitud,0);
}
p = fork();
if (p == 0)
{
msgrcv(buzon,&mensaje,longitud,3,IPC_NOWAIT;
}
}
else
{
printf("CLAVE NO COINCIDE");
}
}
}
Y hasta aquí llego... ¿alguien me podría hechar una mano?
Gracias!