Привет!
Вот такая программка, в двух вариантах (раскомментирована либо строчка 1, либо строчка 2):
#include <stdio.h>
int main() {
FILE* file = fdopen(1, "r");
char str[100];
fscanf(stdin, "%s", str); // 1
//fscanf(file, "%s", str); // 2
printf("%s\n", str);
}
И вот такой запуск:
$ echo 12345 | ./test
Если читать из stdin, строчка 12345 прочитывается, сразу же выводится на консоль и программа завершается.
Если читать из file, строчка 12345 игнорируется, программа ждет ввода строки и потов выводит её (без 12345).
Всё так и должно быть? Такое поведение не соответствует модели, которая у меня в голове
ОС -- FreeBSD 7.2