Вот моя программа.Почему порядок вывода программы на C отличается, когда его stdout перенаправляется в файл?
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello\n");
system("uname");
return 0;
}
Вот вывод.
$ gcc foo.c
$ ./a.out
Hello
Linux
Однако, если перенаправить вывод программы в файл, я вижу, что порядок выхода восстанавливается, т.е. Linux
выводится перед Hello
.
$ ./a.out > out.txt
$ cat out.txt
Linux
Hello
Почему порядок вывода отличается при перенаправлении?
Неправильно. Даже если терминал делает буферизацию (я думаю, что нет), он имеет только один «входной приемник»: переупорядочение данных там не может быть. – linuxfan