views:

54

answers:

1

The OS I'm working on (IBM CNK, which is not Linux, but somewhat POSIX-compliant) doesn't allow me to simply create a new file or directory in /dev/shm using fopen() or mkdir(), respectively. It looks like I have to use shm_open() to get a file descriptor and then fdopen() to use the shared region for file I/O.

  • Do I need to set the size of the shared region using ftruncate(), or does it grow automatically? I've tried it and I can simply fprintf into the region and it works, but is it safe? The manpage only says:

    A new shared memory object initially has zero length — the size of the object can be set using ftruncate(2). The newly allocated bytes of a shared memory object are automatically initialized to 0.

  • Do I want to mmap() the region? I simply want to have a directory with files in it in memory.

  • How would I create a new directory in /dev/shm? Is this "work with /dev/shm as if it was a normal filesystem" a new thing? Are directories in /dev/shm maybe not standard?

A: 

Does your OS provide a full-featured mmap ? Do you only need the shared memory area in relatives, i.e. processes that you forked off ? If those two conditions are met you don't need any files at all, just use mmap:

char *shm_area;
shm_area = mmap(NULL, mySHMsize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, 0, 0);

if (fork() == 0) {
  // Child, can access shm_area.
} else {
  // Parent, can access shm_area.
}
DarkDust