0

以VirtualBox的虚拟磁盘为例:如果VirtualBox没有避开host os中FileSystem的缓冲机制,guest os中的FileSystem会将数据从内存移动到内存。

实际上,我想在用户空间中编写一个文件系统(将所有目录和文件放在一个大文件中)。但是如果我使用c api这样的fread和fwrite,os中的FileSystem会缓冲My UserSpace-FileSystem读取、写入的数据。但是My UserSpace-FileSystem本身已经实现了缓冲机制。如果我没有避免缓冲机制从操作系统中的文件系统,我的用户空间文件系统会将数据从内存移动到内存。太糟糕了。

有谁知道如何解决这个问题?

4

2 回答 2

4

stdio不支持。

对于 *NIX:man open对于 O_DIRECTman fadviseman madvise.

对于 Windows,请CreateFile检查FILE_FLAG_NO_BUFFERING. 可能也是一个好主意CreateFileMapping

于 2010-08-06T13:04:10.750 回答
1

您的问题不是很清楚,但是如果您只想在stdio没有缓冲的情况下使用,那么setbuf(file, NULL);将解决您的问题。更好的解决方案可能是完全避免stdio并使用较低级别的 io 原语read,write等(不是普通 C 的一部分,而是由 POSIX 指定,并且在大多数非 POSIX 系统上也可以使用几乎等效的版本)。

于 2010-08-06T12:20:14.517 回答