Boost Shared Memory validity

I'm using Boost Shared Memory to share a vector across processes.

In the client, how can I, once I try and open the shared memory and read a vector off it, realize if the memory is not valid, or is not what I'm looking for.

Will the Open_Only fail if the memory segment does not exist, and if so, how do I catch this failure?

Also, the shared memory segment is supposed to be removed, if there are no references to it. However, in my case, even when both the client and server are shut down, and nothing else is accessing the shared memory, the segment remains in Boost Interprocess folder in Program data, with some data. So the next time client starts up, it has no problem opening up the segment, and so thinks it is accessing correct data when in fact, there is no data to be shared.

Kindly advise. Thank you.

Answers


Speaking from experience with the underlying shm api--and not as a Boost expert...

To determine validity, one technique is to figure out if the current process is the one that is creating the shared memory (the first time). You can do this by getting the size after creating (fstat) and seeing if the size is zero. If it is zero, the process is creating it. Once you know that you can initialize it. Also, when you call truncate() to set the size here, that size is set for all other processes.

To ensure removal, you can call shm_unlink() to remove the shared memory file from the system. I believe in Boost there is a remove() api that will do that.


Need Your Help

Select with NVL2 Not working Oracle

sql oracle plsql oracle11g

I am selecting values from the database using Functions. I have three different functions in which if the first does not return anything I check for the second and third functions for values using ...

SSH library for Java

java ssh ssh-tunnel

Does anyone know of a good library for SSH login from Java.