繁体   English   中英

Boost iostream:如何将ifstream转换为内存映射文件?

[英]Boost iostream: how to turn ifstream into memory mapped file?

我想要的是简单地打开文件以将其作为内存映射文件读取-为了将来以更高的速度访问它(例如:我们打开文件将其读取到结尾,等待并一次又一次地读取),同时我想要该文件可以被其他程序修改,并且在修改时我也希望我的ifstream也进行修改。 如何使用Boost iostream(或Boost进程间)执行此类操作? 我们能不能高个操作系统-嘿,这个文件应该为所有应用程序进行内存映射吗?

所以我尝试这样的代码:

#include <iostream> 
#include <boost/iostreams/device/mapped_file.hpp> 
#include <boost/iostreams/stream.hpp> 

using namespace boost::iostreams; 

int main(int argc, char **argv) 
{
    stream <mapped_file_sink> out; 
    try 
    { 

        mapped_file_params p("one.txt"); 
        p.new_file_size = 1024 * sizeof (char); 
        out.open(mapped_file_sink(p),  std::ios_base::out | std::ios_base::binary); 
    } 
    catch (const std::exception &e) 
    { 
        std::cout << e.what() << std::endl; 
        return 2; 
    } 
    std::cin.get();
    return 0; 
} 

因此它会打开或创建文件,然后将其放入ram。 但是我无法从任何其他程序访问它(无法编辑和保存,但可以打开)=(如何使文件可从其他程序编辑?

我想您正在寻找文件访问速度,但是为什么要重新发明轮子呢? 使用内存映射分区,并在其中创建文件。 然后,您只需要不时地将它们同步到磁盘分区中,这样就不会在电源故障的情况下丢失信息...您可以随时投资UPS ... ;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM