I am trying to use Boost for creating a shared memory. This is my code:
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <iostream>
#define BUF_SIZE 1*1024*1024
int main()
{
shared_memory_object tx_data_buffer(create_only ,"tx_data_memory", read_write);
tx_data_buffer.truncate(BUF_SIZE);
mapped_region tx_region(tx_data_buffer, read_write);
//Get the address of the region
cout << "\n\nTX Data Buffer Virtual Address = " << tx_region.get_address() << endl;
//Get the size of the region
cout << "\n\nTX Data Buffer Size = " << tx1_region.get_size() << endl;
}
I ran the above code succesfully a few times before (not sure whether it was one time or more than one times). But when I am trying to run the same code again, it is giving me the following error:
terminate called after throwing an instance of 'boost::interprocess::interprocess_exception'
what(): File exists
I am running the code on Eclipse in Linux. Any idea as to what is causing this?
You're specifically asking the shared_memory_object to open in
create_onlymode. Of course, when it exists, it cannot be created, so it fails. The error message is very clear: "File exists".One way to resolve your problem is to use
open_or_createinstead:Or, alternatively, explicitly delete the shared memory object:
Keep in mind that you have synchronize access to shared memory from different threads.