Pagina 1 di 1

Linux,c e pipe....

Inviato: gio 4 gen 2007, 13:28
da V
Ciao a tutti!

Sto facendo un programma che comunica tramite pipe in c:

1) Il server resta in attesa che venga scritto qualcosa sulla pipe selezionata
2) Invio il comando che il server deve eseguire con

Codice: Seleziona tutto

 echo comando > nomefile
Il fatto è che una volta eseguito il passo 2, il server riceve ripetutamente il comando...
L'unica soluzione che ho trovato è stata quella di chiudere e riaprire la pipe....

Avete qualche altra soluzione più elegante?
Dalle mie parti si dice "no la se so mare!"

Grazie in anticipo!

Inviato: gio 4 gen 2007, 14:26
da Bart
Da quello che ho capito il server riceve continuamente il comando e non una sola volta giusto? La butto lì. Hai provato a metterlo in una funzione e terminarla con un break?

Inviato: gio 4 gen 2007, 15:07
da V
Il server consiste in un loop che legge ripetutamente la pipe ed esegue il comando ricevuto...
Il fatto è che ripete sempre l'ultimo comando consecutivamente anche se lo mando una sola volta....

Inviato: gio 4 gen 2007, 18:13
da nino
forse dico una cavolata ...

Il server legge dalla pipe, ma se si implementa con un loop il server non leggerà mai una sola volta il comando mandato dal client.

Non è forse più corretto porre il server in attesa di un segnale lanciato dal client e solo allora fare in modo che il server legga la pipe? togliendo cosi il loop?

cioè...

il client scrive sulla pipe e successivamente manda un segnale al server, il server(fino ad allora in attesa) si sveglia e legge la pipe(una sola volta senza polling).

Inviato: gio 4 gen 2007, 22:42
da m0rdr3d
o sennò fare un bel flush sullo stream appena dopo aver letto il comando, cioè svuotare il buffer dell'istruzione, in modo che non venga più letta.

Inviato: ven 5 gen 2007, 10:09
da V
nino ha scritto:forse dico una cavolata ...

Il server legge dalla pipe, ma se si implementa con un loop il server non leggerà mai una sola volta il comando mandato dal client.

Non è forse più corretto porre il server in attesa di un segnale lanciato dal client e solo allora fare in modo che il server legga la pipe? togliendo cosi il loop?

cioè...

il client scrive sulla pipe e successivamente manda un segnale al server, il server(fino ad allora in attesa) si sveglia e legge la pipe(una sola volta senza polling).
In teoria, essendo la pipe un FIFO, non dovrebbe essere vuota dopo aver letto il comando? :?
o sennò fare un bel flush sullo stream appena dopo aver letto il comando, cioè svuotare il buffer dell'istruzione, in modo che non venga più letta.
Già fatto..... :?

Mi sa che quà divento matto!

Inviato: ven 5 gen 2007, 10:33
da bit123
Se non posti il codice, si possono fare solo supposizioni!