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/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 );
}
这是一项测试 这是一个测试
FakePre-577940c2ae1541378f8c828b6d36dd6e-6be6a95aef4c412c9910c3da6cf88b5d