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

fopen的缓冲区是虚拟文件系统,还是在lib层?

    来源: 互联网  发布时间:2016-07-23

    本文导语:  google了很多fopen和open的区别,都只是讲到了fopen带缓冲区,open不带;fopen是调用open函数来实现的。 但是,我迷惑的是,open函数是虚拟文件系统提供的函数,而虚拟文件系统对每个文件都有buffer_page或者radix树来缓存管...

google了很多fopen和open的区别,都只是讲到了fopen带缓冲区,open不带;fopen是调用open函数来实现的。
但是,我迷惑的是,open函数是虚拟文件系统提供的函数,而虚拟文件系统对每个文件都有buffer_page或者radix树来缓存管理的。也就是我理解的缓存应该在open内部就存在了,为何可以说fopen才有缓存open没有呢?难道fopen在c库层还专门有另外一个功能更加健全的缓存吗?

|
open确实不带缓冲,每次才做都会发生内核态与用户态的切换。

而fopen是在用户态就有缓冲。所以有没有是针对用户态的。

|
open 是 系统调用。  
fopen 是 libc 中的库函数。

接下来  read 系统调用, 从内核态的角度来说,内核中肯定是有缓冲的。 但这个缓冲 和用户态没有关系。
用户态的 read 和 write 会把数据 刷到 内核态的缓冲区中去,由内核决定下一步的动作。

而 fread 和 fwrite 不同,fwrite 会把数据写入用户态的缓冲区,等到 fflush 的时候才会调用系统调用,把数据刷入内核。

|
如3楼所说
从内核态的角度来说,内核中肯定是有缓冲的。 但这个缓冲 和用户态没有关系。

你向内核发出了写fd的write系统调用,那还能咋地,只能祈祷内核及时响应呗,你要相信内核,相信组织
你可以想办法提高你程序的nice级别
或者打NPTL补丁提高内核实时性

    
 
 

您可能感兴趣的文章:

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












  • 相关文章推荐
  • codeblocks8.02 for linux,程序可以编译通过,但是通过右键“查找fopen函数的声明”或“实现”,都是提示“没有找到:fopen”,为什么
  • fopen问题请教
  • 关于fopen函数
  • linux程序关于fopen的疑问!
  • fopen能这么用吗?
  • fopen 打开一个文件多次突然失败
  • open和fopen的区别?
  • 奇怪的fopen问题,创建不了文件,错误号却返回0
  • fopen第二个参数-打开模式的问题
  • ARM平台下fopen打开文件出现段错误
  • fopen 不能打开文件
  • fopen出的错?
  • fopen函数打不开一个郁闷的文件
  • 请问为何fopen()函数不能正确打开文件。
  • 想看fopen函数的源码
  • flock与fopen的问题?
  • 关于fopen,fread,fgets的问题,请教
  • 关于fopen以及编码的问题
  • 为什么我用fopen打开两个不同的文件,得到相同的指针地址呢
  • Solaris上fopen的问题


  • 站内导航:


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

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

    浙ICP备11055608号-3