2013-05-23 18 views
8

Quindi questa è probabilmente una domanda stupida, ma non riesco a vedere cosa sto facendo male.reindirizzamento output produce file vuoto

Sto eseguendo un programma che produce output quando viene chiamato come ./ar. L'output è simile a:

-0.00781 0.02344 0.98828               
-0.01172 0.02734 0.98828               
-0.01562 0.02344 0.98047               
-0.00781 0.02344 1.00000               
-0.00391 0.02344 0.98438 

Una nuova riga di output viene scritta ogni secondo.

Quando chiamo il codice ./ar > log e il programma si interrompe utilizzando ctrl-c dopo alcuni secondi, il file log è vuoto.

Sto eseguendo questo codice su un sistema incorporato. Il sistema ha una partizione scrivibile che è la partizione in cui sto correndo, e ho accesso in scrittura poiché sono registrato come root.

+10

Quando si effettua il reindirizzamento, l'output è protetto da blocchi, non bufferizzato dalla linea. Se premi Ctrl-C prima che un blocco sia pieno, non viene scritto nulla nel file. Puoi usare 'fflush (stdout)' per farlo scrivere immediatamente sul file. –

+0

Grazie, che ha risolto il mio problema, ho dovuto eseguire questa riga prima di ogni istruzione printf. – James

+3

Farlo dopo il 'printf' è più naturale. –

risposta

-1

Il motivo è il concetto di scrittura pigro del sistema UNIX.

+0

un'altra cosa mentre stai reindirizzando il tuo output e uccidi il tuo processo significa che l'output non è ancora pronto. l'operazione pipe inoltra l'output al processo successivo solo quando l'output del primo processo è pronto. –

1

Sei sicuro che stai guardando lo standard output nella tua chiamata ./ar? Potrebbe essere un errore standard. Quindi, prova ./ar> log 2> err per avere 2 file, uno per stdout e uno per stderr.

Oppure utilizzare ./ar 2> & 1> accedere per ottenere un file per entrambi i flussi.

Problemi correlati