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


fflush

Сбрасывает поток.

int fflush( 
   FILE *stream 
);

Параметры

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

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

fflush возвращает 0, если буфер был успешно сброшен. Значение 0 также возвращается в случаях, когда указанный поток не содержит буфера или открыт только для чтения. Возвращаемое EOF значение указывает на ошибку.

Примечание

Если fflush возвращает EOF, данные могут быть потеряны из-за сбоя записи.При настройке обработчика критических ошибок безопаснее всего отключить буферизацию функцией setvbuf или использовать низкоуровневые процедуры ввода-вывода, например _open, _close и _write вместо функций потокового ввода-вывода.

Заметки

Функция fflush сбрасывает поток. Если файл, связанный с stream, открыт для вывода, fflush записывает в этот файл содержимое буфера, связанного с потоком. Если поток открыт для ввода, fflush очищает содержимое буфера. fflush инвертирует результат любого вызова ungetc для stream. Кроме того, fflush(NULL) сбрасывает все потоки, открытые для вывода. Поток остается открытым после вызова. fflush не влияет на небуферизованный поток.

Буферы обычно обслуживаются операционной системой, которая определяет оптимальное время записи данных на диск автоматически: если буфер заполнен, при закрытии потока или когда нормально завершается выполнение программы без закрытия потока. Функция фиксации на диск библиотеки времени выполнения позволяет убедиться в том, что критические данные записаны непосредственно на диск, а не в буферы операционной системы. Можно включить эту функцию без переписывания программы, связав объектные файлы программы с COMMODE.OBJ. В появившемся исполняемом файле вызовы _flushall записывают содержимое всех буферов на диск. Только _flushall и fflush подвержены влиянию COMMODE.OBJ.

Дополнительные сведения о управлении функцией фиксации на диск см. в разделах Stream I/O, fopen и _fdopen.

Эта функция блокирует вызывающий поток и, поэтому, потокобезопасна. Для неблокирующей версии см. _fflush_nolock.

Требования

Функция

Обязательный заголовок

fflush

<stdio.h>

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

Пример

// crt_fflush.c
#include <stdio.h>
#include <conio.h>

int main( void )
{
   int integer;
   char string[81];

   // Read each word as a string.
   printf( "Enter a sentence of four words with scanf: " );
   for( integer = 0; integer < 4; integer++ )
   {
      scanf_s( "%s", string, sizeof(string) );      
      printf( "%s\n", string );
   }

   // You must flush the input buffer before using gets. 
   // fflush on input stream is an extension to the C standard 
   fflush( stdin );   
   printf( "Enter the same sentence with gets: " );
   gets_s( string, sizeof(string) );
   printf( "%s\n", string );
}
  This is a test
Это тест

FakePre-8d16d72323d94c3b8b5502385bfddf78-97ae05d03faf49e2abb2ab99c3de2aac

Эквивалент в .NET Framework

System::IO::FileStream::Flush

См. также

Ссылки

Потоковый ввод-вывод

fclose, _fcloseall

_flushall

setvbuf