PDA

Visualizza la versione completa : [C] comunicazione tra processi


Fusic86
19-09-2013, 12:35
Ciao a tutti.
Sto realizzando il classico programmino produttore-fornitore in C, per un progetto all'Università.
Il programma(molto semplice) vede un processo produttore padre che crea N figli, che consumano delle materie prime(ognuno le sue). Una volta terminate contattano un processo fornitore, che crea un processo figlio per gestire la richiesta e torna in attesa di ulteriori richieste da parte dei produttori.
Stavo pensando ad una comunicazione tramite socket con mutua esclusione al momento della chiamata al processo fornitore padre.
Pensate sia l'approccio giusto?

E ora veniamo al problema vero e prorpio.
Sto riscrivendo tutto il programma causa perdita di dati nell'Hard-disk ma quello che avevo realizzato non funzionava. Mi dava errori a manetta al momento della comunicazione.
Cercando su internet non sono riuscito a trovare spiegazione esaustive riguardo la comunicazione di processi tramite socket.
Avete idee o suggerimenti?
Qualcuno ha realizzato qualche programma simile da potermi mostrare per avere le idee più chiare?

Grazie in anticipo.

linoma
19-09-2013, 13:51
Io userei le pipe (http://it.wikipedia.org/wiki/Pipe) al posto dei sockets sn più performanti.

Fusic86
19-09-2013, 14:26
ci avevo già pensato ma non ho la più pallida idea di come si usino e/o di come dovrei comportarmi.
da una prima letta credo che dovrei usare una named pipe poichè i 2 processi padre sono separati e non hanno modo di conoscere i descrittori degli altri.
così a primo impatto direi:

-il PRODUTTORE crea i processi figli che consumano
-questi terminate le materie creano una pipe e contattato la pipe del fornitore passandogli l'identificativo della pipe
-il FORNITORE crea un processo figlio al quale passa l'identificatore della pipe produttore, il quale a sua volta crea una pipe e risponde con il proprio identificatore
-do il via alla comunicazione

è sbagliato questo mio ragionamento/procedimento?

Come faccio a fare tutto ciò?

Loading