1 |
|
---|
2 | #include <iostream>
|
---|
3 | #include <exception>
|
---|
4 |
|
---|
5 | #include <boost/iostreams/device/mapped_file.hpp>
|
---|
6 | namespace bio = boost::iostreams;
|
---|
7 |
|
---|
8 | using namespace std;
|
---|
9 |
|
---|
10 | int main( void ) {
|
---|
11 | try {
|
---|
12 | std::string fileName( "test.dat" );
|
---|
13 | cerr << fileName <<endl;
|
---|
14 |
|
---|
15 | int osAlignment = bio::mapped_file_source::alignment();
|
---|
16 | cerr << osAlignment <<endl; //65536 (WinXP)
|
---|
17 |
|
---|
18 | bio::mapped_file_source fileMap( fileName, 2 * osAlignment, 0); //filename, sz, offset
|
---|
19 | cerr << fileMap.is_open() <<endl; //1, ok
|
---|
20 | cerr << "open ok!" <<endl;
|
---|
21 |
|
---|
22 | // Load data to application memory using fileMap.data();
|
---|
23 |
|
---|
24 | fileMap.close();
|
---|
25 | cerr << "close ok!" <<endl;
|
---|
26 | cerr << fileMap.is_open() <<endl; //0, ok
|
---|
27 |
|
---|
28 | // The following line throws because fileMap.is_open() returns true
|
---|
29 | fileMap.open( fileName, 1024 * osAlignment, 1024 * osAlignment );
|
---|
30 | cerr << "reopen ok!" <<endl;
|
---|
31 |
|
---|
32 | // Load more data to application memory using fileMap.data();
|
---|
33 | }
|
---|
34 | catch (std::exception& e) {
|
---|
35 | cout << "Exception: \"" << e.what() << "\" caught." << endl;
|
---|
36 | }
|
---|
37 |
|
---|
38 | return 0;
|
---|
39 | }
|
---|
40 |
|
---|
41 | // 2nd open fails with:
|
---|
42 | // Exception: "failed mapping view: access denied" caught.
|
---|
43 | // mingw gcc 4.2.1 / Windows XP / boost 1.36.0
|
---|