如何避免FileSystem的缓冲机制

时间:2010-08-06 11:53:19

标签: c filesystems buffer virtualbox

以VirtualBox的虚拟磁盘为例:如果VirtualBox没有从主机操作系统中的FileSystem中避开缓冲机制,则guest虚拟机操作系统中的FileSystem会将数据从内存移动到meory。

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

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

stdio不支持。

对于* NIX:man open代表O_DIRECT,man fadviseman madvise

对于Windows,请查看FILE_FLAG_NO_BUFFERING {{1}}。可能也是挖掘CreateFile的好主意。

答案 1 :(得分:1)

您的问题不是很明确,但如果您只想使用stdio而不进行缓冲,那么setbuf(file, NULL);将解决您的问题。一个更好的解决方案可能是完全避免stdio并使用较低级别的io原语readwrite等(不是普通C的一部分,但是由POSIX指定,并且几乎相当于它们的版本也适用于大多数非POSIX系统。)