C 如何避免文件系统中的缓冲机制

C 如何避免文件系统中的缓冲机制,c,filesystems,buffer,virtualbox,C,Filesystems,Buffer,Virtualbox,以VirtualBox的虚拟磁盘为例:如果VirtualBox没有避免主机操作系统中文件系统的缓冲机制,来宾操作系统中的文件系统会将数据从内存移动到内存 事实上,我想在用户空间中编写一个文件系统(将所有目录和文件放在一个大文件中)。但是如果我使用c api,比如fread和fwrite,操作系统中的文件系统会缓冲我的用户空间文件系统读取、写入的数据。但是我的用户空间文件系统本身实现了一个缓冲机制。如果我不从操作系统中的文件系统中避免缓冲机制,我的用户空间文件系统会将数据从一个内存移动到另一个内存

以VirtualBox的虚拟磁盘为例:如果VirtualBox没有避免主机操作系统中文件系统的缓冲机制,来宾操作系统中的文件系统会将数据从内存移动到内存

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


有人知道如何解决这个问题吗

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

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

stdio
不支持这一点

对于*尼克斯:对于O_DIRECT,以及


对于Windows,请检查是否有
文件\u标志\u无\u缓冲
。也许挖这个洞也是个好主意。

stdio
不支持这一点

对于*尼克斯:对于O_DIRECT,以及


对于Windows,请检查是否有
文件\u标志\u无\u缓冲
。也许挖掘数据流也是个好主意。

似乎较低级别的io也会缓冲数据流。也谢谢。这是一个单独的缓冲层,您通常不应该试图避免它,尽管一些被误导的应用程序供应商竭尽全力做到这一点。。。最臭名昭著的是甲骨文。看起来较低级别的io也会缓冲流。也谢谢。这是一个单独的缓冲层,您通常不应该试图避免它,尽管一些被误导的应用程序供应商竭尽全力做到这一点。。。最臭名昭著的是甲骨文。