对r/w中的文件进行多重访问

multiple access to file in r/w

本文关键字:访问 文件      更新时间:2023-10-16

我计划写一个程序,它必须在r/w中多次访问某个文件。所以我决定使用fstream,因为我可以将这个类用于阅读和写作目的。

我的想法是在应用程序启动时打开文件,然后在应用程序关闭时关闭它。

由于文件可以任意大,我计划使用"分页"结构,其中:

1) 为每个页面预先分配固定数量的内存和固定数量的页面

2) 将文件的一部分加载到第一个可用页面

3) 如果没有可用的页面,我选择一个具有特定条件的非空页面,我在其中提交所有编辑(如果有),然后加载页面中的文件部分。

这并不难编码。但我想知道我是否要重新发明轮子。。。也许fstream本身是以智能的方式编写的,因此它也实现了类似的分页机制。如果是那样的话,我不会在意,只是随时写作和阅读。

有什么建议吗?

不要自己动手。除非您使用非常奇特的实现,否则fstream类已经高效地实现了这样的机制。

签出http://www.cplusplus.com/doc/tutorial/files/"缓冲区和同步">

如果使用旧内核或标准库的实现seek处理大于2GB的文件,则可能会出现问题。检查这个C中的大文件支持++或使用Boost.Filesystem

标准C++库的内部工作因实现而异。因此,需要进行测试,以便在您喜欢的平台上获得一些真实数据。通常,内存映射文件被认为是访问存储在文件中的数据的最快方式(正如Uflex在评论中提到的,但它也有一些缺点(请参阅链接的wiki页面)。您可以使用标准(POSIX)C函数mmap()munmap(),也可以使用Boost C++库,这些库还具有用于内存映射文件的可移植C++接口。