Precedente :: Successivo |
Autore |
Messaggio |
saetta Eroe in grazia degli dei

Registrato: 25/02/08 11:52 Messaggi: 129
|
Inviato: 19 Set 2008 09:48 Oggetto: [C]redirigere l'input e l'output di un programma su file |
|
|
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 |
|
 |
chemicalbit Dio maturo


Registrato: 01/04/05 18:59 Messaggi: 18597 Residenza: Milano
|
Inviato: 19 Set 2008 10:12 Oggetto: |
|
|
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 |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 19 Set 2008 14:04 Oggetto: |
|
|
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 |
|
 |
chemicalbit Dio maturo


Registrato: 01/04/05 18:59 Messaggi: 18597 Residenza: Milano
|
Inviato: 19 Set 2008 14:11 Oggetto: |
|
|
freemind ha scritto: | l'unica cosa che ti ritroverai nel file di output gli eventuali out delle printf. | Non è appunto il risultato voluto? |
|
Top |
|
 |
saetta Eroe in grazia degli dei

Registrato: 25/02/08 11:52 Messaggi: 129
|
Inviato: 19 Set 2008 14:39 Oggetto: |
|
|
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 |
|
 |
chemicalbit Dio maturo


Registrato: 01/04/05 18:59 Messaggi: 18597 Residenza: Milano
|
Inviato: 19 Set 2008 15:23 Oggetto: |
|
|
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 |
|
 |
SverX Supervisor Macchinisti


Registrato: 25/03/02 12:16 Messaggi: 11810 Residenza: Tokelau
|
Inviato: 19 Set 2008 15:50 Oggetto: |
|
|
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...
 |
|
Top |
|
 |
saetta Eroe in grazia degli dei

Registrato: 25/02/08 11:52 Messaggi: 129
|
Inviato: 19 Set 2008 16:30 Oggetto: |
|
|
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 |
|
 |
chemicalbit Dio maturo


Registrato: 01/04/05 18:59 Messaggi: 18597 Residenza: Milano
|
Inviato: 19 Set 2008 17:22 Oggetto: |
|
|
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 |
|
 |
SverX Supervisor Macchinisti


Registrato: 25/03/02 12:16 Messaggi: 11810 Residenza: Tokelau
|
Inviato: 19 Set 2008 17:29 Oggetto: |
|
|
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 |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 19 Set 2008 20:43 Oggetto: |
|
|
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 |
|
 |
saetta Eroe in grazia degli dei

Registrato: 25/02/08 11:52 Messaggi: 129
|
Inviato: 20 Set 2008 08:28 Oggetto: |
|
|
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 |
|
 |
|