read系统调用与istream::read函数有何不同



我的操作系统教授今天谈到了当istream::read函数有缓冲区时,read系统调用是如何被解除缓冲的。这让我有点困惑,因为在使用istream::read函数时,您仍然为其制作缓冲区。

我唯一能想到的是istream::read函数调用中有多个缓冲区。为什么?

istream::read((函数与read(((函数系统调用有什么不同?

教授谈论的是istream内部的缓冲区,而不是调用代码提供的缓冲区。

举个例子,假设您正在从istream中读取单个int对象,istream可能有一个内部缓冲区,其中存储了一些字节数,并且可以从中满足下一次读取,而不是进入操作系统。然而,请注意,无论istream挂接到什么,都很可能有内部缓冲区。大多数操作系统都可以执行零拷贝读取(也就是说,直接从I/O源读取到缓冲区(,但这种功能有严格的限制(读取大小必须是某个特定字节数的倍数,如果从磁盘文件读取,文件指针也必须是该字节计数的倍数(。大多数时候,这样的零拷贝阅读不值得这么麻烦。

相关内容

  • 没有找到相关文章

最新更新