Поделиться через


feof

Определяет окончание файла в потоке.

Синтаксис

int feof(
   FILE *stream
);

Параметры

stream
Указатель на структуру FILE .

Возвращаемое значение

Функция feof возвращает ненулевое значение, если операция чтения пытается продолжить чтение файла после того, как он закончился; в противном случае возвращается значение 0. Если указатель потока указан NULL, функция вызывает обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если выполнение может быть продолжено, параметр errno принимает значение EINVAL, а функция feof возвращает значение 0.

Дополнительные сведения о кодах возврата см. в разделе errno, _doserrno_sys_errlistи _sys_nerr.

Замечания

Подпрограмма feof (реализованная и как функция, и как макрос) определяет, пройден ли конец stream. Если конец файла пройден, операции чтения возвращают индикатор окончания файла, пока поток не будет закрыт или пока для него не будет вызвана функция rewind, fsetpos, fseek или clearerr.

Например, если файл содержит 10 байтов, и вы читаете 10 байт из файла, feof возвращается значение 0, так как, несмотря на то, что указатель файла находится в конце файла, вы не пытались прочитать за пределами конца. Функция feof вернет ненулевое значение только после того, как вы попытаетесь прочитать 11-й байт.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Требования

Функция Обязательный заголовок
feof <stdio.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

// crt_feof.c
// This program uses feof to indicate when
// it reaches the end of the file CRT_FEOF.TXT. It also
// checks for errors with ferror.
//

#include <stdio.h>
#include <stdlib.h>

int main( void )
{
   int  count, total = 0;
   char buffer[100];
   FILE *stream;

   fopen_s( &stream, "crt_feof.txt", "r" );
   if( stream == NULL )
      exit( 1 );

   // Cycle until end of file reached:
   while( !feof( stream ) )
   {
      // Attempt to read in 100 bytes:
      count = fread( buffer, sizeof( char ), 100, stream );
      if( ferror( stream ) )      {
         perror( "Read error" );
         break;
      }

      // Total up actual bytes read
      total += count;
   }
   printf( "Number of bytes read = %d\n", total );
   fclose( stream );
}

Входные данные: crt_feof.txt

Line one.
Line two.

Выходные данные

Number of bytes read = 19

См. также

Обработка ошибок
Потоковый ввод-вывод
clearerr
_eof
ferror
perror, _wperror