У меня проблемы с fgets () в linux.fgets возвращает мне данные из закрытого файлового дескриптора.Я ожидаю, что он вернет EOF, если файл был закрыт.Я могу предложить упрощенную версию своей проблемы.
int main()
{
int i=0, j;
FILE *FD;
char p[128];
FD = fopen("junk", "r");
while(fgets(p, sizeof(p), FD))
{
close(fileno(FD));
printf("lineno=%d\n", i++);
}
return 0;
}
Я ожидаю, что она напечатает только одну строку.Есть ли способ обойти эту проблему?
Обновление: как кто-то ответил ниже, fgets буферизует файл и возвращает мне данные даже после закрытия FD.Он буферизует 4 КБ данных.Если размер файла больше 4 КБ, он получает EOF после чтения 4 КБ, и печать останавливается.Иначе, если размер файла меньше, спасибо 4k, он печатается до конца файла.