Trasferimento struttura tramite FIFO

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
federicofollini
Prode Principiante
Messaggi: 3
Iscrizione: giovedì 30 giugno 2016, 9:43
Sesso: Maschile

Trasferimento struttura tramite FIFO

Messaggio da federicofollini »

Ciao! Mi trovo ad avere questa struttura per far comunicare due processi (padre e figlio) tramite memoria condivisa:

Codice: Seleziona tutto

typedef struct operazione {
	int id;				
	int num1;			
	int num2;		
} operation;
Ora dovrei sostituire la memoria condivisa con una comunicazione fifo.. come posso fare? ho provato così, ma non compila..
//_______________________CREAZIONE DELLA PIPE_______________________
int pID[2];
int pN1[2];
int pN2[2];

//creo canale di comunicazione
pipe(pID);
pipe(pN1);
pipe(pN2);

//_________________CODICE DEL PADRE______________________

close(pID[0]);
close(pN1[0]);
close(pN2[0]);
close(pOP[0]);

[... codice....]

//prima con la memoria condivisa facevo così
o.id = atoi(buf); //converto l'id e lo salvo nella struttura "o" (di tipo operation)

//ora ho provato così, ma non funziona
write(pID[1], o.id , 30);
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: Trasferimento struttura tramite FIFO

Messaggio da melfnt »

Se è un errore di compilazione dovrebbe essere semplice da risolvere, no?
Qual'è di preciso l'errore?

(:

Ad occhio ti posso dire che quando scrivi in una pipe con la write, comunque devi scrivere un buffer di caratteri (che comunque potrai convertire in qualsiasi tipo con opportuni casting).

Codice: Seleziona tutto

operation *indirizzo_di_o = &o;
write(pID[1], (char*)indirizzo_di_o , sizeof (o)); 
Inoltre, assicurati che il figlio rilegga le stesse informazioni.
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: Trasferimento struttura tramite FIFO

Messaggio da vbextreme »

pipe o fifo(named pipe)?
illustra meglio anche il problema che stai riscontrando e ricordati che in Linux tutto è uno stream, oops, file
Easy framework per il linguaggio C.
vbextreme hack your life
federicofollini
Prode Principiante
Messaggi: 3
Iscrizione: giovedì 30 giugno 2016, 9:43
Sesso: Maschile

Re: Trasferimento struttura tramite FIFO

Messaggio da federicofollini »

melfnt [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894365#p4894365][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Se è un errore di compilazione dovrebbe essere semplice da risolvere, no?
Qual'è di preciso l'errore?

(:

Ad occhio ti posso dire che quando scrivi in una pipe con la write, comunque devi scrivere un buffer di caratteri (che comunque potrai convertire in qualsiasi tipo con opportuni casting).

Codice: Seleziona tutto

operation *indirizzo_di_o = &o;
write(pID[1], (char*)indirizzo_di_o , sizeof (o)); 
Inoltre, assicurati che il figlio rilegga le stesse informazioni.
Ho provato inserendo il codice che mi hai suggerito.. però non ho capito una cosa: facendo così passo l'intera struttura? e poi come faccio nel figlio a tirar fuori i vari valore? Ora la compilazione non da errori, però il programma termina senza far nulla :muro:
federicofollini
Prode Principiante
Messaggi: 3
Iscrizione: giovedì 30 giugno 2016, 9:43
Sesso: Maschile

Re: Trasferimento struttura tramite FIFO

Messaggio da federicofollini »

vbextreme [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894578#p4894578][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:pipe o fifo(named pipe)?
illustra meglio anche il problema che stai riscontrando e ricordati che in Linux tutto è uno stream, oops, file
fifo :D Anche perchè il codice è tutto su un unico file
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: Trasferimento struttura tramite FIFO

Messaggio da vbextreme »

frdericofollini ha scritto: fifo :D Anche perchè il codice è tutto su un unico file
questa tua affermazione è assolutamente priva di senso.
Ti invito a rileggere le pipe e fifo, nel frammento di codice che hai postato stai usando le pipe e non le named pipe aka fifo.
ti invito a postare un codice, tramite gli appositi tag code, che riproponga il problema.
Easy framework per il linguaggio C.
vbextreme hack your life
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: Trasferimento struttura tramite FIFO

Messaggio da melfnt »

Quoto vbextreme: in rete c'è un sacco di documentazione di come si usano le pipe.
Con il frammento di codice che ti ho postato passi tutta la struttura, ma usando quel metodo puoi inviare qualsiasi variabile o struttura di qualsiasi lunghezza. Poi ovviamente la devi rileggere dall'altra parte.

;)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 11 ospiti