linux下IO工作机制

        每一个FILE文件流(输出流、输入流、错误流)都有一个缓冲区buffer,默认大小8192Byte。

        每一个文件流都有三个部分组成:文件描述符 、位置指针、缓冲区buffer。如下图右边所示

        我们平时写程序用到的都是c标准函数,我们并不清楚在操作系统中怎么处理我们的输入的,下面就以printf来距离说明:

假如现在有程序A需要向屏幕输出hello,首先程序A调用printf,我们写入的hello存入c标准的缓存区。当刷新之后将其送入操作系统中,操作系统也有一个内核缓冲区。当数据送入操作系统之后,应用层write的将其放入操作系统的缓冲区,当达到一定数量,或者通过守护进程(可以定时刷新)进行输出之后,将hello从内核缓冲区通过内核层sys_write送入显示设备。

      当应用程序A输入hello完成时,应用程序B去读取hello,能够读的到吗?

这就得看我上面的分析了,应用程序A输入完成返回只是表明已经将hello送入了操作系统,而没有显示设备。但是对于应用程序B来说是希望能读取的到的,所以操作系统有一个机制,就是让B直接从操作系统的内核缓冲区中读取。

 

注意:c标准缓冲区是每个程序都有的,A程序的缓冲区B是看不见的,但是在内核缓冲区是共有的。所以A写入的B可见。(所以这就是为什么B程序没有直接读取c标准缓存区,而去读取内和缓冲区)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值