I am writing a C ++ program using VS2010 to read a text file and extract certain information from it. I completed the code with a filter and it worked well. However, now I will be asked to map the file to memory and use it, rather than file operations.
I am absolutely new to memory mapping. Part of the code I wrote is as follows.
boost::iostreams::mapped_file_source apifile; apifile.open(LogFileName,LogFileSize); if(!apifile.is_open()) return FILE_OPEN_ERROR; // Get pointer to the data. PBYTE Buffer = (PBYTE)apifile.data(); while(//read till end of the file) { // read a line and check if it contains a specific word }
When using filestream, I would use eof and getline and string::find to perform operations. But I do not know how to do this using a memory mapped file.
EDIT 1:
int ProcessLogFile(string file_name) { LogFileName = file_name; apifile.open(LogFileName);//boost::iostreams::mapped_file_source apifile(declared globally) streamReader.open(apifile, std::ios::binary);//boost::iostreams::stream <boost::iostreams::mapped_file_source> streamReader(declared globally) streamoff Curr_Offset = 0; string read_line; int session_id = 0; int device_id = 0; while(!streamReader.eof()) { \\COLLECT OFFSETS OF DIFFERENT SESSIONS } streamReader.close(); }
This function worked, and I got offsets in the required structure.
Now, after calling this function, I call another function as follows:
int GetSystemDetails() { streamReader.open(apifile, std::ios::binary); string read_line; getline(streamReader,read_line); cout << "LINE : " << read_line; streamReader.close(); }
I do not receive any data in read_line. Is this memory mapping for only one function? How can I use the same file with memory mapping in different functions?
source share