2013-05-23 13 views
8

Jest to prawdopodobnie głupie pytanie, ale nie widzę, co robię źle.Przekierowanie wyjścia powoduje pusty plik

Używam programu, który produkuje dane wyjściowe po wywołaniu, tak jak ./ar. Dane wyjściowe wyglądają następująco:

-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 

Nowa linia danych wyjściowych jest zapisywana co sekundę.

Kiedy wywołuję taki kod ./ar > log i zabijam program za pomocą ctrl-c po kilku sekundach plik log jest pusty.

Uruchomiłem ten kod w systemie wbudowanym. System ma partycję zapisu, która jest partycją, na której działam, i mam dostęp do zapisu, ponieważ jestem zalogowany jako root.

+10

Po przekierowaniu wyjście jest buforowane, a nie buforowane. Jeśli naciśniesz Ctrl-C, zanim blok się zapełni, nic nie zostanie zapisane w pliku. Możesz użyć 'fflush (stdout)', aby natychmiast zapisać do pliku. –

+0

Dzięki, że naprawiłem mój problem, musiałem uruchomić tę linię przed każdym poleceniem printf. – James

+3

Wykonanie tego po 'printf' jest bardziej naturalne. –

Odpowiedz

-1

Powodem jest leniwa koncepcja pisania systemu UNIX.

+0

Jeszcze jedno, przekierowując wyjście i zabijając proces, oznacza to, że dane wyjściowe nie są jeszcze gotowe. Operacja rura przekazuje wyjście do następnego procesu tylko wtedy, gdy wyjście pierwszego procesu jest gotowe. –

1

Czy jesteś pewien, że szukasz standardowego wyjścia w twoim telefonie ./ar? Może to być standardowy błąd. Więc spróbuj ./ar> log 2> err, aby mieć 2 pliki, jeden dla stdout i jeden dla stderr.

Lub użyj ./ar 2> & 1> zaloguj się, aby uzyskać jeden plik dla obu strumieni.

Powiązane problemy