I am trying to write a simple program which listens to some data on network and writes to a file. I decided to use mmapped files because the data is very large (magnitude of 3-5 Gigs) and very fast. so as expected, i put the data in queue and another thread pops it out and writes into the mmap file.
this is my first time to venture into windows based C++ programming. I maybe missing something basic with Shared memory mapped files here. could you someoen suggest me what configuration do i have to use to make it work? I think i am a little confused about the buffer size, and other parameters like maximum object size (high-order DWORD), maximum object size (low-order DWORD) etc.
Following is the code snippet in my program ..
#define BUF_SIZE1 4096*1024 // 4 mb buffer DWORD dwflags; unsigned long lowDWordVal = 0; unsigned long highDWordVal = 0; unsigned long dwordSize = 4294967294; dwflags = GENERIC_READ | GENERIC_WRITE; m_hFile = CreateFile(filename, dwflags, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL); hMapFile = CreateFileMapping(m_hFile, // use paging file NULL, // default security PAGE_READWRITE, // read/write access 2, // maximum object size (high-order DWORD) dwordSize, // maximum object size (low-order DWORD) "Outputmmap"); // name of mapping object pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object FILE_MAP_ALL_ACCESS, // read/write permission highDWordVal, lowDWordVal, BUF_SIZE1); //BUF_SIZE);
Above is the initialization part which maps the file correctly. After this another funcion which writes to a mmap file. .
I will skip the code which writes to mmap file. All it does is maintain an index position in the file and when it seaches the length BUF_SIZE1 it unmaps the file and then maps it to the index+1 position.
This code also worked fine, but everytime i run the program it writes some amount of data and after sometime it crashes. It crashes everytime with error Could not write at memory locates 0x xyz.. I believe something to do with incorrect mapping.
Could someone please advice? Anything specifc that I should look at?