2016-01-13 9 views
0

Я нахожусь на хосте Windows 7 с установленным cygwin 1.7.0.Почему tee ждет окончания программы .exe?

Я хочу видеть вывод myTest.exe на консоли и в то же время записывать его в myTest.log, но весь вывод отображается только после завершения myTest.exe.

Я пробовал предлагаемое решение here, и это работает хорошо. Тогда я написал следующее myTest.c:

#include <stdio.h> 
#include <Windows.h> 

int main() { 
    printf ("hello\n"); 
    Sleep(5000); 
    printf("goodbye\n"); 
    return 0; 
} 

и скомпилировать его с помощью команды

gcc myTest.c -o myTest 

Исполнительной test.exe без тройника работает, как ожидалось, но если я выполняю

./myTest.exe | tee myTest.log 

Я получаю все выходные на консоли только после myTest.exe делается.

Любые предложения, как я могу получить вывод на консоль, пока myTest.exe все еще работает?

ответ

0

Консольный выход буферизуется, поэтому, когда программа завершается, он сбрасывает буфер. Вам нужно будет явно сбросить буфер перед сном, чтобы он сразу же был написан. Например:

fflush(stdout); 
+0

Только при отправке на интерактивную сессию. При отправке в файл или канал \ n не очищает буфер. http://stackoverflow.com/questions/5229096/does-printf-always-flush-the-buffer-on-encountering-a-newline – allen1

+0

Нет проблем! Я изучаю этот способ LOT в переполнении стека. Это одна из причин, по которой мне нравится приезжать сюда! :-) – allen1

+1

Работает с 'fflush (stdout)'. Я решил это с помощью 'setvbuf (stdout, NULL, _IONBF, 0); setvbuf (stderr, NULL, _IONBF, 0) '(как указано в ссылке, которую вы опубликовали) в начале моей основной функции, так что нет необходимости использовать' fflush' все время;) –