PDA

Visualizza la versione completa : [C] Stampare la stessa stringa sia su file che su terminale


xavier310
22-10-2012, 19:06
Salve a tutti :) vorrei chiedervi se è possibile stampare una serie di stringhe sia su file che sul terminale. Mi spiego meglio:

Ho visto che in molti codici, si lascia # nei printf per far fronte ad eventuali stampe su file ed elaborazioni dati


printf("# Integrazione equazioni oscillatore armonico\n");

ora, come faccio a far stampare questa stringa sia sul file che sul terminale?

perchè facendo


fprintf(fp,"# Integrazione equazioni oscillatore armonico\n");

me la stampa solo sul file

torn24
23-10-2012, 18:39
Non esiste necessità di scrivere contemporaneamente su file e visualizzare su console !
possiamo permetterci di aspettare qualche millesimo di secondo :)

quindi usi due funzioni in successione fprintf() per scrivere su file , e printf() per scrivere a video , printf è idenntica a fprintf eccetto per l'argomento file

xavier310
23-10-2012, 18:48
Ho capito, chiaro! :) Comunque era più che altro per rendere il codice più snello evitando di ripetere due volte le stesse cose

MItaly
23-10-2012, 19:41
Tip: su sistemi UNIX-like puoi "wrappare" il tuo programma in uno script che usi l'utility tee per scrivere sia su standard output che su file.


#!/bin/bash
./tuoprogramma "$@" | tee out.txt

xavier310
24-10-2012, 18:57
Tip: su sistemi UNIX-like puoi "wrappare" il tuo programma in uno script che usi l'utility tee per scrivere sia su standard output che su file.

Terrò presente anche questa possibilità :) ti ringrazio!

MItaly
24-10-2012, 19:07
:ciauz:

YuYevon
25-10-2012, 20:45
Del resto lo stesso comando tee nelle GNU coreutils non fa altro che scritture su file in maniera sequenziale:



while (1)
{
bytes_read = read (0, buffer, sizeof buffer);
if (bytes_read < 0 && errno == EINTR)
continue;
if (bytes_read <= 0)
break;

/* Write to all NFILES + 1 descriptors.
Standard output is the first one. */
for (i = 0; i <= nfiles; i++)
if (descriptors[i]
&& fwrite (buffer, bytes_read, 1, descriptors[i]) != 1)
{
error (0, errno, "%s", files[i]);
descriptors[i] = NULL;
ok = false;
}
}

Loading