человек fflush
в Ubuntu:
Для входных потоков, связанных с доступными для поиска файлами (например, дисковые файлы, но не каналы или терминалы), fflush()
отбрасывает любые буферизованные данные, которые были извлечены из базового файла, но не были использованы приложением.
Я прочитал несколько вопросов, говорящих о fflush(stdin)
и fflush()
входном потоке неопределенного поведения в соответствии со стандартом, это верно. Но для Linux, в частности, я прочитал комментарии, в которых говорится, что это не неопределенное поведение, а расширение, да, на странице руководства выше указано, как это будет работать с потоком ввода файлов.
Итак, почему fflush()
входной файловый поток не отбрасывает буферизованные данные, которые были извлечены из базового файла, но не были использованы приложением. , как описывает man-страница?
Перед поиском в Интернете я полностью верю справочной странице, и теперь я хочу знать, если это не так.
Пример кода:
haha2.txt: 123456
, без перевода строки или пробелов.
#include <stdio.h>
int
main()
{
FILE* fp = fopen("haha2.txt", "r");
int q = getc(fp);
fflush(fp);
int j = getc(fp); // I expect the rest variables to be -1(EOF) starting from here
int j2 = getc(fp);// But they can still read data as if fflush does not executed
int j3 = getc(fp);
int j4 = getc(fp);
int j5 = getc(fp);
int j6 = getc(fp);
int j7 = getc(fp);
int j8 = getc(fp);
printf("%c,%c,%c,%c,%c,%c,%c,%c\n", j,j2,j3,j4,j5,j6,j7,j8);
return(0);
}