Share via


fflush

刷新流。

int fflush( 
   FILE *stream 
);

参数

  • stream
    指向 FILE 结构的指针。

返回值

如果缓冲区刷新成功,则 fflush 返回 0 。 指定流没有缓冲区或只读的打开状态的情况下返回 值 0。 返回值 EOF 指示一个错误。

备注

如果 fflush 返回 EOF时,数据可能因为写失败丢失而丢失。在设置关键错误处理程序,最安全的做法是用 setvbuf 函数关闭缓冲区或使用底层 I/O 例程,例如 _open,_close和 _write 替代 I/O 流函数。

备注

fflush 函数刷新流。 如果关联 stream 的文件输出流,fflush 将与流关联的缓冲区内容写到文件中。 如果是输入流,fflush 清除缓冲区内容。 fflush 否定任何先前的调用效果 ungetc 对 stream。 此外,fflush(NULL) 刷新所有输出流。 流在调用之后保持打开。 fflush 不会影响未缓冲的流的效果。

这些缓冲区通常由操作系统维护,自动确定最佳时间将数据写入磁盘:当缓冲区已满,当关闭了流,或者当程序正常终止,而无需关闭流时。 运行时库的提交到磁盘的功能,可以确保关键数据直接写入磁盘,而不是操作系统的缓冲区。 无需重写现有的程序,您可以通过链接程序的对象文件与 COMMODE.OBJ 启用此功能。 在生成的可执行文件,调用 _flushall 将所有缓冲区的内容写入磁盘中。 只有 _flushall 和 fflush 受 COMMODE.OBJ 影响。

有关控制提交到磁盘的功能的信息,请参阅 Stream I/Ofopen_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 );
}
  这是一项测试
这是一个测试

FakePre-577940c2ae1541378f8c828b6d36dd6e-6be6a95aef4c412c9910c3da6cf88b5d

.NET Framework 等效项

System::IO::FileStream::Flush

请参见

参考

流 I/O

fclose、_fcloseall

_flushall

setvbuf