【发布时间】:2015-02-27 04:57:23
【问题描述】:
我试图准确地确定使用 C/C++ 库的用户级程序与操作系统(及其组件,如文件系统的页面缓存或磁盘缓存)之间的一些交互。我有两个问题。
首先,在 C/C++ 库中是“无缓冲的”,相当于操作系统中的“无预读”和“无缓存”。还是我正在遭受断开连接?
其次,是否可以使用 C++ 的流执行非缓存文件操作和非缓冲读取?如果是这样,由于似乎没有任何open flags 与之相关,如何做到这一点?
我问的原因类似于以下内容。我正在使用一个提供与 C++ 流集成的 C++ 库,并且我想确保我没有得到任何无意的副作用。
ifstream("/dev/random");
...
如果流触发读取块或扇区大小(如 4K 或 8K)但我只需要 32 个字节,那么我浪费了很多潜在的熵。我什至可能会耗尽它并拒绝自己和其他程序。
我觉得这个问题可能已经被问到并得到了回答,但我找到它的运气并不好。
这是一个相关问题(感谢 Dietmar):How to disable buffering on a stream?。但它没有解决或讨论由于操作系统或文件系统预读和缓存而可能出现的意外副作用。
【问题讨论】:
标签: c++ ifstream unbuffered diskcache