Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
[C]redirigere l'input e l'output di un programma su file
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
saetta
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 25/02/08 11:52
Messaggi: 129

MessaggioInviato: 19 Set 2008 09:48    Oggetto: [C]redirigere l'input e l'output di un programma su file Rispondi citando

Buongiorno,
per redirigere tutto l'input (da utente) e tutto l'output di un programma c su un file, volendo evitare ogni volta di scrivere:

printf("aaaaaa");
fprintf(miofile,"aaaaaaa")

o

scanf("aaaaaa");
fprintf(miofile,"aaaaaaa")

posso usare per caso gli operatori "<" ">" (redirezione della della shell) con una chiamata system() ?
C'è un modo più corretto?
Top
Profilo Invia messaggio privato
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 19 Set 2008 10:12    Oggetto: Rispondi citando

Se il programma utilizza lo standard input e lo standard ouptup,

puoi, dopo averlo compilato, al momento di usaralo ridirigere lo standard output o lo standard input o entrambi,
usando l'apposito sistema ( gli operatori "<" ">" ) del tuo sistema operativo

(qual è il tuo sistema operativo, a proposito?).
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 19 Set 2008 14:04    Oggetto: Rispondi citando

Come ha detto chemical puoi usare ">" e "<" e anche ">>", l'unica cosa che ti ritroverai nel file di output gli eventuali out delle printf.
Top
Profilo Invia messaggio privato
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 19 Set 2008 14:11    Oggetto: Rispondi citando

freemind ha scritto:
l'unica cosa che ti ritroverai nel file di output gli eventuali out delle printf.
Non è appunto il risultato voluto?
Top
Profilo Invia messaggio privato
saetta
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 25/02/08 11:52
Messaggi: 129

MessaggioInviato: 19 Set 2008 14:39    Oggetto: Rispondi citando

Uso ubuntu 8, ma vorrei che la mia applicazione sia portabile (x lo meno su linux red hat).

Citazione:
Se il programma utilizza lo standard input e lo standard ouptup

Intendi se le fprintf sono del tipo (stdin,"stringa")?

Comunque, dall'interno del programma è possibile far si che ad un certo file corrisponda tutta la copia dell'input e dell'output?Oppure è una cosa che devo prevedere quando viene invocato da shell il programma?
Ho le idee un po' confuse...
Top
Profilo Invia messaggio privato
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 19 Set 2008 15:23    Oggetto: Rispondi citando

bhe, io mi riferivo all'uso di printf e di scanf

(usare fprintf (stdin,"stringa") penso che praticamente sia la stessa cosa, ma inutile ...).


Solitamente i programmi vengono lasciati liberi di usare standar input e standard output,
perché così poi pososno essere utilizzati così o reindirizzati alla bisogna tramire sistema operativo.

(viceversa sarebbe meno facile fare in modo coa ad es. un programma creato per mandare l'output in un file, reindirizzarlo sullo schermo).




Venendo a quello che vuoi fare tu,
ma il nome del file di input e quello di output è sempre fisso, e non modificabile dall'utente?


p.s. ma tu voi creare una ''copia'' -cioè ad es. l'output deve sia essere visualizzato sullo schermo sia deve essere salvato in un file? O vuoi che venga ''solo'' salvato nel file?
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11810
Residenza: Tokelau

MessaggioInviato: 19 Set 2008 15:50    Oggetto: Rispondi citando

in pratica fintanto che il tuo programma accetta l'input dalla periferica stdin e fa output in stdout allora chiunque potrà, nella chiamata al programma, usare i comandi propri di redirezione dell'input/output per redirigere l'uno o entrambi a piacimento.

Diverso se vuoi ottenere, per dire, sia un output su stdout sia l'output su un file... quello lo devi fare tu, ad esempio costruendoti una tua funzione che -per ogni stringa- faccia sia una printf che una fprinf...

Ciao
Top
Profilo Invia messaggio privato HomePage
saetta
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 25/02/08 11:52
Messaggi: 129

MessaggioInviato: 19 Set 2008 16:30    Oggetto: Rispondi citando

il programma viene chiamato con

"nome_programma file_config file_log"

voglio salvare una copia sell'input e dell'output sul file_log
(config lo uso per configurare una struct... lasciamo perdere),
il nome del log viene dato da chi invoca il programma, chiaramente lo apro in append e se non lo trova lo crea nuovo e vuoto.
Ogni volta che avviene un output deve apparire a video e deve essere scritto sul file log. Lo stesso per l'input, deve essere registrato nel file.
Fin'ora pensavo alla soluzione di sverx, scrivermi una f.ne apposita(che noia).E credo che sia anche l'unico modo...
Top
Profilo Invia messaggio privato
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 19 Set 2008 17:22    Oggetto: Rispondi citando

Copiare l'output non è difficile, ogni volta che dovresti fare una fprint fai invece

fprint_doppia (variabile con nome file log, tutti i parametri che passeresti a printf)


E crei la funzione in modo che faccia
prima fprint(vari parametri)
e poi fprintf(variabile con nome file log, vari parametri)

E' proprio questa la comodità delle funzioni,
nel tuoi main puoi sostituire una funzione (printf) con un'altra (printf_doppia, che in questo caso particolare a sua volta richiama printf)



Quanto all''input:
lo devi mettere nello stesso file?
Ogni volta che prendi un input lo salvi nel file con una normale fprintf
oppure ti crei una funzione scanf_fprintf (alla quale passi anche il parametro relativo al nome del file di log) che faccia prima una scanf, salvi con fprintf nel file di log, e ritorni gli stessi valori ed effetti di una normale scanf
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11810
Residenza: Tokelau

MessaggioInviato: 19 Set 2008 17:29    Oggetto: Rispondi citando

saetta ha scritto:
Ogni volta che avviene un output[b] deve apparire a video e deve essere scritto sul file log.


Se è accettabile che l'output a video avvenga alla fine del programma potresti incorporare il tutto in un batch che faccia

Codice:
@echo off
nome_programma file_config file_log
type file_log


ma non credo questo ti basti...
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 19 Set 2008 20:43    Oggetto: Rispondi citando

Forse avevo capito male il problema.
Se vuoi diciamo fare un log di quello che l'utente digita e le relative risposte del programma sei costretto a scrivere il programma in modo che mandi sia l'output a video che su file.

Se la tua domanda era invece riferita al fatto di avere la possibilità di inserire in un file di input tutti gli input che il software prevede e di fare un redirect verso un file per l'output allora devi considerare alcune cose.
Per esempio, e qui rispondo anche a chemical riguardo al suo quoting del mio post precedente, se il tuo programma a video con una printf stampa la parola ciao, inserisci un numero, il redirect manderà sul file anche la scritta "ciao, inserisci un numero ".

Mi pare di capire però che è più il primo caso, quindi credo che tu debba per forza scrivere sia a video che su file.
Top
Profilo Invia messaggio privato
saetta
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 25/02/08 11:52
Messaggi: 129

MessaggioInviato: 20 Set 2008 08:28    Oggetto: Rispondi

si, mi scriverò una scanf-fprint() e una printf-fprintf().
Preferisco che il log contenga passo passo ciò che avviene, e che l'output a video sia contestuale ai passi del programma.
Grazie 1000 a tutti.
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi