【问题标题】:Which is better fread() or read()? [duplicate]fread() 和 read() 哪个更好? [复制]
【发布时间】:2014-09-16 13:11:05
【问题描述】:

据了解,fread()是一个库函数,缓冲I/O操作。 read() 是一个无缓冲 I/O 的系统调用。由于缓冲 I/O 更快,所以 fread 可能是有利的。但 fread 最终调用 read() 进行操作。那么 fread() 比 read() 有多大优势呢?为什么需要 fread() 而 read 可以完成这项工作?

【问题讨论】:

标签: c linux system call


【解决方案1】:

如果您不需要系统级别的原始访问,则应使用缓冲库函数。

fread 是 stdio.h C-Header 的一部分。如果您想为 Windows、Linux 和 Mac 编写可移植代码,这是最好的方法,因为该功能在每个 C 编译器上都可用。

【讨论】:

  • fread() 随后在内部调用 read() 将数据放入缓冲区,对吧???那为什么要使用 fread 而不是直接使用 read() 呢?
  • 错了。这取决于您使用的是哪个系统。在 Linux/Unix 上,fread() 调用 read()。但是read() 系统调用是 POSIX。 Windows 不是 POSIX,在 Windows 上没有 read() 函数。在 Windows 系统上,fread() 调用另一个函数。 (我不知道这个名字,因为我不知道 Windows API)。另外fread()更容易使用。
  • 是的,我得到了一些观点,例如,在某些情况下,文件被经常读取。在这些情况下,如果使用 read(),那么内核切换非常频繁,这是不好的。为了避免这种情况,可以使用 fread。由于 fread 是缓冲 I/O,在第一次调用中,它在内部调用 read 并将整个块复制到缓冲区缓存中。现在对 fread 的后续调用将引用缓冲区缓存中已经存在的数据(无需再次调用 read())。因此建议在这种情况下使用 fread()。
猜你喜欢
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多