fflush()函数

whdugh 2013-05-07 12:13:30
调用fflush()函数可以将缓冲区任何未写的数据发送到一个由fp指定的输出文件中去。这个称为刷新缓冲区。
Q1:这句话的意思是不是只能用fflush(stdout)将缓冲区的数据输出啊?

Q2:fflush(stdin)是怎么清空缓冲区的啊?还有就是书上说对一个输入流使用fflush()函数的效果是未定义的,这是什么意思不明白啊?

谢谢啦


...全文
652 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
善良超锅锅 2013-05-07
  • 打赏
  • 举报
回复
百度百科上讲的很清楚 http://baike.baidu.com/view/656650.htm
qq120848369 2013-05-07
  • 打赏
  • 举报
回复
标准库只保证刷新写缓冲,对于读缓冲的刷新行为未定义。 读写之间要fseek清空FILE状态以及缓冲,lseek偏移文件到准确位置。 切忌只在写操作后调用fflush,否则行为未知。
bluewanderer 2013-05-07
  • 打赏
  • 举报
回复
一般情况下你fwrite会写到内存缓冲区里,流的内部实现会自行判断什么时候要把内存里缓冲的数据真正输出。而fflush会强制把缓冲的数据输出。对于输入流是不存在写缓冲这种概念的,因为C标准库输入输出走的是同一个接口,所以可以对输入流使用fflush,不过这是没意义的。
AnYidan 2013-05-07
  • 打赏
  • 举报
回复
引用 2 楼 qq120848369 的回复:
标准库只保证刷新写缓冲,对于读缓冲的刷新行为未定义。 读写之间要fseek清空FILE状态以及缓冲,lseek偏移文件到准确位置。 切忌只在写操作后调用fflush,否则行为未知。
未定义的意思是实现者可以自行决定,但据说 microsoft 将其定义了
赵4老师 2013-05-07
  • 打赏
  • 举报
回复
http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’,再点立即安装 再参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\fflush.c
赵4老师 2013-05-07
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
whdugh 2013-05-07
  • 打赏
  • 举报
回复
引用 1 楼 bluewanderer 的回复:
一般情况下你fwrite会写到内存缓冲区里,流的内部实现会自行判断什么时候要把内存里缓冲的数据真正输出。而fflush会强制把缓冲的数据输出。对于输入流是不存在写缓冲这种概念的,因为C标准库输入输出走的是同一个接口,所以可以对输入流使用fflush,不过这是没意义的。
我怎么感觉输入流和把数据写到缓冲区是一个概念啊
whdugh 2013-05-07
  • 打赏
  • 举报
回复
引用 2 楼 qq120848369 的回复:
标准库只保证刷新写缓冲,对于读缓冲的刷新行为未定义。 读写之间要fseek清空FILE状态以及缓冲,lseek偏移文件到准确位置。 切忌只在写操作后调用fflush,否则行为未知。
额 谢谢 我在好好理解你说的话
就是那个党伟 2013-05-07
  • 打赏
  • 举报
回复
缓冲区,有输入,和输出 fflush()主要是用来刷新输出缓冲区吧 能使缓冲区内输出的条件有: 缓冲区满了, 遇到了 \n 函数结束了 使用 fflush() 这四个吧。如果有别的请补充,谢谢

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧