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:
mentre questo è il client: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); } } } }
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 )

Rispondi quotando