PDA

View Full Version : direzionare input output ad altro processo


ascovale
04-08-2012, 11:59
salve a tutti :D ,
ho un dubbio e non so proprio se si possa realizzare!:muro:
Chiamiamo 2 processi A e B
A: manda un comando a B (tramite fifo)
B: è un processo in background riceve il comando e lo esegue.
Dato che B è in background vorrei redirezionare l'input e l'output ad A (che lo deve perciò gestire).
Parte di questo lo posso realizzare tramite una system, gli operatori "< >" e 2 fifo, per convenenzia le chiamo fifoinput e fifooutput.
Ora cerco di esporre il problema che si trova in A.
Il processo A dopo aver inviato il comando si trova in attesa di input e/o output (sulle fifoinput e fifooutput) finchè non viene terminato il comando da B (A può essere anche forkato in modo di dividersi i compiti tra input e output).
Di preciso per stampare a video l'output A effettua una read sulla fifooutput e successivamente una printf.
Il problema è che non sono in grado di sapere la quantità di byte da leggere e neppure il tipo di dato... se fosse solo un tipo di dato si potrebbe risolvere facilmente ma non tutti i comandi accettano ad esempio caratteri.
si propone più o meno lo stesso problema con la write, ma, non sono in grado di sapere il tipo e la quatità di dati da leggere da tastiera.

Si può realizzare in qualche modo???:help:
Ciao e grazie in anticipo!!!
P.S. sistema operativo: "ubuntu 10.04"

wizard1993
04-08-2012, 13:16
versione quick & dirty: scrivi prima un intero con la dimensione dell'input.
versione quick & dirty 2: mandi a raffica ed in fondo concateni un segnale prestabilito di fine flusso (tipo un EOF)
versione 3: mandi una quantità prestabilita di dati a prescindere da quanti in realtà sono, che ne so 50 byte, e continui fino a che non raggiungi la fine, quello che avanza lo riempi con valori nulli

ascovale
04-08-2012, 13:39
prima di tutto grazie della risposta :D!
Ora non so se sbaglio o non so come si fà!
dato che il comando è eseguito dal processo B con una system() non posso gestire io direttamente le write.
Perciò non posso fare una write precedente ad un flusso in uscita in output... quick and dirty (1 per intenderci) non si può utilizzare.
la quick and dirty 2 ha un'altro problema per stampare a video come faccio a sapere che tipo di dato o di fronte?
la versione 3 propone entrambi i problemi ... hihi speriamo che stia sparando cavolate

ascovale
14-08-2012, 14:54
continuo a cercare su internet ma nulla da fare!!! Nessuno può aiutarmi???