簡體   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