2014-01-29 12 views
1

나는 boost::iostream 메모리 맵 파일에 초보자이며 클래스를 이해하는 데 어려움을 겪고 있습니다.읽기 및 쓰기 모두에 대해 부스트 스트림 메모리 맵을 여는 방법

필자의 기능으로 쓰기와 읽기를위한 새로운 메모리 맵 파일을 생성하고 싶습니다. 글쓰기 부분에 성공했지만 값을 다시 읽는 법을 모르겠습니다.

mapped_file_params::mode 매개 변수처럼 보이는 문서를 읽는 것은 mapped_file_sourcemapped_file_sink 클래스 모두에 의해 무시됩니다.

가능하면 스트림으로 사용하고 싶으므로 seekgread을 사용하고 싶습니다.

사용할 수 없다면 무엇을 사용할 수 있습니까? 다시 읽을 때 mapped_file_sink::data()을 사용해도 되니? 내 코드

namespace bip = boost::iostreams; 

bio::mapped_file_params prm("data.out"); 
prm.new_file_size = 256; // in reality it will be bigger. 
prm.mode = std::ios::in | std::ios::out; 
bio::stream<bio::mapped_file_sink> ooo; 
ooo.open(bio::mapped_file_sink(prm)); 

char AA; 

AA = 'A'; 
ooo.write(&AA,1); 

AA = 'B'; 
ooo.write(&AA,1); 

char BB; 
bio::seek(ooo,0,BOOST_IOS::beg);  
ooo.read(&BB,1); // this fails 
cout << B << endl; 

답변

2

mapped_file_sink 다음

은 쓰기 전용입니다 - 모드 매개 변수를 무시하는 이유입니다. mapped_file_source은 읽기 전용입니다. 읽고 쓰려면 모두 mapped_file을 사용하십시오.

+0

안녕하세요. Wojtek. 고마워요. 이제 내가 다음과 같은 스트림에 전달하고 싶다고 가정 해 봅시다. 그러나 그것이 맞다면 100 % 확실하지 않습니다 : bio :: stream bs (f); iostream & s (bs); 여기서 f는 bio :: mapped_file입니다. 그것은 괜찮아 보인다. 그 접근법에 문제가 있습니까? –

+0

문제 없음 - 정상적으로 작동하지만 일반적으로's'는 필요 없으며's'를 사용하고자하는 곳에는'bs'를 사용하십시오. –

+0

고마워요! 멋진 것! –