2016-08-03 235 views
0

我是Boost世界的新手,並試圖在內存映射的二進制文件中進行讀/寫操作。但我真的不知道該怎麼做,並陷入了兩者之間的某個地方。確切地說,我希望我的二進制文件被映射到內存,然後對它執行讀/寫操作。 直到現在,我一直在努力做的東西,如:在內存中讀取/寫入使用Boost的C++映射文件

stream_buffer<file_sink> is("test.txt"); 
std::ostream out(&is); 
out << "This is written to file." << std::endl; 
is.close(); 

請幫助我瞭解如何繼續進行這樣那樣的問題。 一個POC將很好理解。由於

回答

0
+0

我已經通過文檔的一部分了,仍然沒能得到一些東西。 看到我想要的是將我的文件映射到內存,對其執行讀/寫操作,並且這些更改應該顯示在存儲在磁盤上的文件中。 file_mapping fm(argv [1],mode); mapped_region region(fm,mode,0,0); void * add = region.get_address(); char * begin = static_cast (add); cout <<「映射區域大小:」<< region.get_size(); string mystr(「Voila!Good Morning。in new line。Hello。」); cout << endl << mystr.size()<< endl; memcpy(begin,mystr.c_str(),mystr.size()+ 1); – naiveCoder

+0

但問題是mapped_region是一個固定的內存。但是我的字符串可以是任意長度的。所以我想要的東西不需要依賴於尺寸,或者我可以根據我的字符串的長度來改變尺寸。 – naiveCoder

+0

@naiveCoder通常您無法更改大小,除非通過重新映射http://stackoverflow.com/questions/6096485/how-to-dynamically-expand-a-memory-mapped-file請記住,它不完全是文件 - 虛擬內存塊,所以不要期望文件行爲。 –