2013-03-24 132 views
0

我遇到了使用mapped_file iostreams庫的boost問題。boost :: iostreams :: mapped_file文件路徑問題

Boost文檔:mapped_file

通過所有的文檔和例子我能讀讀書後,我仍然不能得到下面這段代碼工作。我假設當你傳遞一個new_file_size和一個到mapped_file_params類的路徑時,它會在我使用參數中的mapped_file_params對象調用mapped_file的構造函數時打開(並創建)所需位置的文件。 但它唯一能做的就是用一個奇怪的名字創建一個文件,比如項目工作目錄中的「%F8/134」,而不是我告訴它的地方。 也許我錯了,應該在將文件指定到mapped_file之前創建文件?閱讀完文檔後,我假設它在填寫new_file_size參數時創建了一個新文件。並指定文件名。

以前有沒有經歷過這個?有關如何解決此問題的任何建議?

下面的代碼:

boost::iostreams::mapped_file_params param(filename); // filename is a std::string with the correct path 
param.flags = boost::iostreams::mapped_file::mapmode::readwrite; 
param.new_file_size = sizeNeeded; // sizeNeeded is the size of the data 
param.length = sizeNeeded; 
boost::iostreams::mapped_file fileMap(param); // at this point the file is created 
… 

感謝您的時間,

亞歷山大

+0

你可以嘗試初始化構造函數中的所有參數,比如offset嗎? – 2013-03-24 18:29:00

+0

只是試了一下,它沒有改變任何東西 – Lex 2013-03-24 19:39:41

回答

0

首先,我不知道mapmode如何::讀寫是支持和推動有多好:: iostream庫被維護。爲了我的好奇心,我在Ubuntu 12.04上用g ++ - 4.7.2編譯了一些稍微「修改過」的代碼,其boost 1.52版本。我沒有看到「奇怪的名字」的問題。該文件是用正確的名稱創建,但mf.open(PARAM)沒有在文件中完成對出現的異常對MMAPmapped_file.cpp

void* data = 
    ::BOOST_IOSTREAMS_FD_MMAP( 
     const_cast<char*>(p.hint), 
     size_, 
     readonly ? PROT_READ : (PROT_READ | PROT_WRITE), 
     priv ? MAP_PRIVATE : MAP_SHARED, 
     handle_, 
     p.offset); 
if (data == MAP_FAILED) 
    cleanup_and_throw("failed mapping file"); 

如果你可以升級到最新版本我會這麼做。另外,您可以在調試模式下構建boost庫並追蹤代碼以查看出錯的地方。在這裏你可以找到一些提示來構建boost庫debug mode