Ciao a tutti, devo creare un programma per la gestione di diversi client. Questo server deve prendere dei comandi e restituire delle risposte e deve supportare la connessione di diversi client contemporaneamente.
Ora, ho capito abbastanza bene come funzionano le wk-fifo singole, nel senso che i client scrivono al server e il server legge ciò che viene scritto sulle fifo, ma a me serve che i client scrivano, il serve legga, risponda su una seconda fifo e i client leggano da quest'ultima il risultato.
Vorrei passarvi del codice ma il discorso è talmente ampio che rischio solo di confondervi le idee con degli esempi particolari, magari con errori che non c'entrano niente.
Provo giusto a farvi vedere cosa ho capito fin'ora,
questo è il server:
codice:
#include <stdio.h>
#include <fcntl.h>
#include <signal.h>
void disconnetti_pipe() {
printf("Server fermato. Rimozione FIFO dal sistema....");
unlink("comandi");
exit(0);
}
int main(int argc, char *argv[]){
int pid, fd, lettura, scrittura;
char r[20];
signal(SIGTERM, disconnetti_pipe);
signal(SIGHUP, disconnetti_pipe);
signal(SIGINT, disconnetti_pipe);
lettura = mkfifo("comandi", 0777);
//scrittura = mkfifo("risposte", 0777);
if ( lettura == -1 ) {
printf("Errore nella creazione della FIFO lato server\n");
exit(1);
}
fd = open("comandi",O_RDONLY);
//fd[1] = open("risposte", O_RDWR);
while(1) {
if ((lettura = read(fd, &r, sizeof(r))) != 0) {
pid = fork();
if (pid==0) {
printf("Richiesta di esecuzione di: %s\n", r);
sleep(1);
execlp(r, r, (char *)0);
}
}
}
}
mentre questo è il client:
codice:
#include <stdio.h>
#include <fcntl.h>
#include <signal.h>
void esci() {
printf("Il server non è in ascolto, uscita dal sistema...");
exit(0);
}
int main(int argc, char *argv[]) {
int fd, esito, risposta; char r[20];
signal(SIGPIPE, esci);
printf("Inserisci il comando da eseguire: ");
scanf("%s", r);
fd = open("comandi", O_WRONLY);
//fd[1] = open("risposte", O_RDWR);
if ( fd == -1 ) {
printf("\n Servizio non disponibile \n");
exit(1);
}
esito = write(fd, &r, sizeof(r));
esito = close(fd);
exit(0);
}
Ora le parti commentate sono quelle relative all'uso di una seconda fifo per la comunicazione server->client, ovviamente manca la parte relativa alla fwrite/fread perchè mi produce proprio errori in compilazione, mentre cosi il codice funziona bene.
Grazie mille in anticipo =)
(Andbin spero che non stai in vacanza :P )