当前位置:  技术问答>linux和unix

缓冲输入输出

    来源: 互联网  发布时间:2016-11-12

    本文导语:  基于流的操作最终都会调用read或write进行操作。即流的内部封装了这两个系统调用。 缓冲分如下三种: 全缓冲(相应宏_IO_FULL_BUF):直到缓冲区被填满,菜调用系统I/O函数。磁盘文件读写通常是全缓冲的。 行缓冲(相...

基于流的操作最终都会调用read或write进行操作。即流的内部封装了这两个系统调用。

缓冲分如下三种:

全缓冲(相应宏_IO_FULL_BUF):直到缓冲区被填满,菜调用系统I/O函数。磁盘文件读写通常是全缓冲的。

行缓冲(相应宏_IO_LINE_BUF):直到遇到换行符'n',才调用系统I/O函数。标准输入输出都是行缓冲的。

无缓冲(相应宏_IO_UNBUFFERED):没有缓冲,数据立即读入或输出到外存文件和设备上。例如标准出错。



对于写操作的缓冲都比较好理解,我现在对读操作的缓冲很迷糊,比如全缓冲,读的时候到底什么时候进行实际的读,是当待读的内容达到缓冲区大小吗?

再比如行缓冲,遇到换行符才进行实际读,如果实际上没读,又怎么知道有没有遇到换行符呢?

|
scanf也类似
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
输入1 2 3但是不按回车,程序就会停在第一行,只有按了回车才会继续

|
还真没留意这个问题哈

个人理解:
1、对于行缓冲,输入时其实已经读入了,但是直到按回车之后,读函数(比如fgets)才返回给应用程序
2、对于普通文件,读时应该先读入一个完整的缓冲区的大小(即使应用程序只要求读一个字节),然后再返回给应用程序指定的字节

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 flush():清空缓冲区
  • linux内核缓冲区与进程缓冲区。
  • unix V的缓冲池。如果把所有缓冲区,都按LRU连接到空闲链表中。
  • read/write已经有了缓冲实现,为什么fread/fwrite还要实现缓冲?
  • LINUX下的缓冲区溢出和WINDOWS下的缓冲区溢出都有什么区别?
  • 为什么IO函数要把内容从内核缓冲区拷贝到用户缓冲区? 有点浪费
  • 关于TCP/IP发送缓冲区和接受缓冲区的问题
  • linux下需要设置网络发送和接受缓冲区大小时,需如何设置,是否系统有最大缓冲区限制?谢谢
  • 内存与缓冲区
  • arm串口缓冲和c编程请教
  • UDP协议在实现时有没有在发送端或者接收端设置缓冲区?
  • 如何确定数据已经从内核缓冲区写入磁盘了?
  • 标准IO库的缓冲区问题
  • 怎样手动清除磁盘高速缓冲?
  • 有关实现双缓冲的问题....参与有分
  • 紧急求救::::::: 一个写,多个读的缓冲区设计的问题?????????????
  • 关于printf的缓冲区的问题
  • 关于Linux系统键盘缓冲的问题
  • 如何清空键盘缓冲区?
  • SMARTDRV后台缓冲到底起什么作用呢?
  • 谁能解析一下输入缓冲机制 iis7站长之家


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3