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

stdio对比unistd仅仅是多了一层缓存么?

    来源: 互联网  发布时间:2017-02-09

    本文导语:  fwrite和write相比,仅仅是fwrite多了一层用户级的缓存? 不同每次写入都要从用户切换到内核态,然后再回来,而是写满了stdio的缓存(512byte)以后再flush到内核? 如果我说的是正确地,那么当我fwrite每次写入的量都比较大(...

fwrite和write相比,仅仅是fwrite多了一层用户级的缓存? 不同每次写入都要从用户切换到内核态,然后再回来,而是写满了stdio的缓存(512byte)以后再flush到内核?
如果我说的是正确地,那么当我fwrite每次写入的量都比较大(写入的原子远大于512byte)的时候,这个所谓的stdio的缓存,岂不是一点用都没有,平添了系统负担,反而比我直接write()更慢了?

我的这个说法有没有问题? 什么情况下fwrite的性能不如直接使用write(),fread()的性能不如直接使用read()?

|
基本正确。

每调用一次write/read函数就对应着一个系统调用。系统调用是比较耗时的。为减少系统调用的次数,所以才有标准IO中的缓冲机制。
所以大范围上讲,fwrite性能肯定是优于write的。
你提到的特殊情况则稍复杂一点,取决于编译器的优化策略,和标准库的实现情况。
在linux上,我没看到这方面数据的对比,我相信glibc会对此做优化。不会比write/read差。
你不妨写个小程序试试看。


|
什么情况下fwrite的性能不如直接使用write(),fread()的性能不如直接使用read()?

如果你的数据需要实时到位,比如一些driver,或者要跟设备文件打交道,就用write呗。省去缓冲的开销。

    
 
 

您可能感兴趣的文章:

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












  • 相关文章推荐
  • C++ I/O 成员 sync_with_stdio():同标准I/O同步
  • ubuntu在编译时提示 错误:stdio.h没有该文件或目录..怎是怎回事?我没动过stdio.h这些头文件怎没了呢?
  • [求救]:找不到stdio.h与ctype.h怎么办 iis7站长之家
  • 关于“stdio.h 没有那个文件或目录”的问题
  • 在cygwin中编译c,结果打不开stdio.h,如何解决!
  • [求救]:找不到stdio.h与ctype.h怎么办
  • error:stdio.h:No such file or directory
  • 调查在unix/linux 下用c编程时你们使用c的stdio库 还是C++的标准流库?
  • 请问哪位大侠有jrun stdio3.01的注册码
  • stdio和read/write,缓冲区写满时阻塞的实现机制是什么
  • help,FEDORA13下找不到stdio.h
  • 请问linux内核编程的能不能调用#include <stdio.h>的函数
  • mingw dev stdio(for win) or vc6 在win 下做gtk程序,怎么配置?
  • 关于stdio.h中的函数,请高手帮忙!
  • 关于stdio.h的函数
  • 同样的代码,换个系统编译就出事了,/usr/include/bits/stdio2.h:282: undefined reference to `__fread
  • stdio.h:No such file or directory?
  • 找不到stdio_iso.h文件
  • stdio.h:312: error: expected declaration specifiers or


  • 站内导航:


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

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

    浙ICP备11055608号-3