Это должно быть очень просто, но я не могу его уловить.
Это тривиальная программа на C, записывающая в стандартный вывод:
root@oceanLondon:~/tst# cat tst.c
#include <stdio.h>
#include <unistd.h>
int
main(int argc, char **argv)
{
for (; ;) {
printf("Hello world!\n");
sleep(1);
}
return 0;
}
Теперь, если я хочу записать вывод на свой экран и в файл:
root@oceanLondon:~/tst# ./tst |tee file
это просто не работает, у меня пустой экран и пустой файл.
если я делаю программу, которая выходит, то она отлично работает, например.
root@oceanLondon:~/tst# ls |tee file
Makefile
file
qq
tst
tst.c
tst.o
root@oceanLondon:~/tst# cat file
Makefile
file
qq
tst
tst.c
tst.o
root@oceanLondon:~/tst#
Это какая-то проблема с буферизацией? И может ли кто-нибудь помочь мне сделать тройник в продолжении программы, пожалуйста?
fflush(stdout);
? - person fredtantini   schedule 31.12.2014fflush()
в каждой итерации, либо вызыватьsetvbuf()
, чтобы стандартная строка вывода буферизовалась явно. - person Jonathan Leffler   schedule 31.12.2014