This example shows how to give access to a shared memory object to another process.
#define INCL_DOSMEMMGR /* Include DOS Memory Management APIs */
#define INCL_DOSERRORS /* DOS error values */
#include <os2.h>
#include <stdio.h>
#include <string.h>
int main (USHORT argc, PCHAR argv[])
{
PVOID pvShrObject = NULL; /* Pointer to shared memory object */
ULONG ulObjSize = 0; /* Size of memory object */
PID pidSharer = 0; /* Process ID for partner */
APIRET rc = NO_ERROR; /* Return code */
/************************************************************************/
/* This example assumes that pidSharer can be initialized here with */
/* the process ID for the process to which we are giving the memory. */
/* Normally this would be passed to this program via inter-process */
/* communication (IPC) - a pipe, a queue, a semaphore, the file system. */
/************************************************************************/
ulObjSize = 4100; /* Will be rounded to a page boundary - 8192 */
rc = DosAllocSharedMem(&pvShrObject, /* Pointer to object pointer */
NULL, /* Unnamed memory */
ulObjSize, /* Desired size of object */
OBJ_GIVEABLE | PAG_COMMIT | PAG_WRITE | PAG_READ );
if (rc != NO_ERROR) {
printf("DosAllocSharedMem error: return code = %u\n",rc);
return 1;
}
rc = DosGiveSharedMem(pvShrObject, /* Object pointer */
pidSharer, /* Process to give to */
PAG_WRITE | PAG_READ); /* Memory attributes */
if (rc != NO_ERROR) {
printf("DosGetSharedMem error: return code = %u\n", rc);
return 1;
}
return NO_ERROR;
}