正文
c语言中fflush函数 fflush
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
C语言中清除内存缓冲区的函数是什么??
是I/O 函数分为“带缓冲”的和“不带缓冲”的两类。
带缓冲的 I/O 函数写数据时c语言中fflush函数,并不直接写磁盘介质c语言中fflush函数,而是将数据先写到这块内存缓冲中c语言中fflush函数,之后用户空间缓冲中的数据会被传送到系统缓冲中。
linux 内核会将系统缓冲中的数据送完磁盘驱动器(fsync函数可以加速这一过程),这之后,数据才真正的被写入磁盘。
因为目前内存的读写速度往往远大于硬盘的读写速度(常 ms 级)。因此,缓冲区的建立可以尽力避免太过频繁的写磁盘。
对于硬盘来说,写入一个字节可能跟写入一个扇区没什么两样,程序员每次写入的数据也许就几个字节,所以可以将每次写入的几个字节放入缓冲区,排列组合成一整块数据再写入,也能极大的提升效率。
扩展资料
1、带缓冲的 I/O 读函数读取数据之前,则会首先判断用户空间的进程缓冲区是否包含数据,如果没有,则继续判断系统缓冲区是否包含数据。
2、“带缓冲”的 I/O 读函数从磁盘读取数据时,并不只读取调用者指定的读取字节数。读函数可能一次性读取一个扇区(常常是 512B)保存在缓冲区里,只返回给程序员需要的 10 字节。
在C语言编程中什么时候需要用fflush(stdin)?
fflush函数刷新一个流,可以用来防止内存地址已经占满,当把这个流指向用户标准输入(stdin)时,可以清除目前缓冲区中的内容,输入回车也会被清楚掉,例如,在scanf()之后使用fflush(stdin)是当输入缓冲区(内存)满了的时候,自动清除输入流缓冲区中所有数据,其实现在内存这么大,每次输入的数据只有几个字节,是几乎用不上的,多用上的地方是在嵌入式开发上面,因为每个固化芯片上一般只有几十k的空间,所以空间显得非常重要,此时就要用上了
C语言fflush(stdin);的用法
首先请看以下程序:
#include stdio.h
int main( void )
{
int i;
for (;;)
{
fputs("Please input an integer: ", stdout);
scanf("%d", i);
printf("%d\n", i);
}
return 0;
}
这个程序首先会提示用户输入一个整数,然后等待用户输入,如果用户输入的是整数,程序会输出刚才输入的整数,并且再次提示用户输入一个整数,然后等待用户输入。但是一旦用户输入的不是整数(如小数或者字母),假设 scanf 函数最后一次得到的整数是 2 ,那么程序会不停地输出“Please input an integer: 2”。这是因为 scanf("%d", i); 只能接受整数,如果用户输入了字母,则这个字母会遗留在“输入缓冲区”中。因为缓冲中有数据,故而 scanf 函数不会等待用户输入,直接就去缓冲中读取,可是缓冲中的却是字母,这个字母再次被遗留在缓冲中,如此反复,从而导致不停地输出“Please input an integer: 2”。
也许有人会说:“居然这样,那么在 scanf 函数后面加上‘fflush(stdin);’,把输入缓冲清空掉不就行了?”然而这是错的!C和C++的标准里从来没有定义过 fflush(stdin)。也许有人会说:“可是我用 fflush(stdin) 解决了这个问题,你怎么能说是错的呢?”的确,某些编译器(如VC6)支持用 fflush(stdin) 来清空输入缓冲,但是并非所有编译器都要支持这个功能(linux 下的 gcc 就不支持),因为标准中根本没有定义 fflush(stdin)。MSDN 文档里也清楚地写着fflush on input stream is an extension to the C standard(fflush 操作输入流是对 C 标准的扩充)。当然,如果你毫不在乎程序的移植性,用 fflush(stdin) 也没什么大问题。以下是 C99 对 fflush 函数的定义:
int fflush(FILE *stream);
如果 stream 指向输出流或者更新流(update stream),并且这个更新流
最近执行的操作不是输入,那么 fflush 函数将把这个流中任何待写数据传送至
宿主环境(host environment)写入文件。否则,它的行为是未定义的。
原文如下:
int fflush(FILE *stream);
If stream points to an output stream or an update stream in which
the most recent operation was not input, the fflush function causes
any unwritten data for that stream to be delivered to the host environment
to be written to the file; otherwise, the behavior is undefined.
其中,宿主环境可以理解为操作系统或内核等。
由此可知,如果 stream 指向输入流(如 stdin),那么 fflush 函数的行为是不确定的。故而使用 fflush(stdin) 是不正确的,至少是移植性不好的。
c语言ffulsh什么意思
fflush()是标准I/O函数中的一个,从其字面意思也可以看出来是冲洗,刷新的意思。大家知道,在程序中进行读写操作的时候,一般情况下都要进行缓冲的,也就是将要读写的内容先保存到一块内存区域,这块内存区域就叫做“缓冲区”,然后在对这个缓冲区进行操作,一匹配不同的设备的读写速率不同的问题。所以很多时候,读写并不是立马就有效的,因为读写的内容被缓冲了。所以,在你想要立马显现效果的时候,可以对缓冲区的内容进行主动刷新,调用ffluash()函数,就是这个功能。此函数可以将缓冲区内任何没有写的数据发送到由一个文件指针指定的输出文件中去,这个过程也叫做刷新缓冲区。
C语言中“fflush(stdin)”的作用是什么?
清除标准输入设备(一般是键盘)的缓存。
scanf()函数接收输入数据时c语言中fflush函数,遇以下情况结束一个数据的输入:(不是结束该scanf函数c语言中fflush函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
键盘缓冲区就可能有残余信息问题。
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中
解决就要在scanf()函数之后加个fflush(stdin)。
flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
c语言中的flush函数怎样用?
是fflush(),它作用是清空输入/输出流,在VC中文件名是.CPP的话就可以用,用法是:
fflush(stdin); //清空输入流
fflush(stdout); //清空输出流
stdin是系统自动生成的指针标准输入流,stdout是系统自动生成的指针标准输出流
c语言中fflush函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于fflush、c语言中fflush函数的信息别忘了在本站进行查找喔。