Основная проблема в том, что нет платформонезависимого способа.Предполагая, что вы работаете в какой-то Unix-системе, для совместного использования между произвольными процессами я бы, вероятно, использовал mmap
для файла.Приятно то, что у вас может быть произвольно много процессов, совместно использующих его, простой способ идентифицировать точку общего доступа (файл), и у вас также есть фактическое постоянное хранилище бесплатно (облегчает отладку).Неважно, насколько сложна ваша структура данных - это просто часть памяти.Таким образом, единственная проблема, которую вам еще предстоит решить, - это как синхронизировать доступ на запись между вашими процессами - и это действительно зависит от приложения (хотя это нелегко, если вы разрешаете запись из нескольких процессов).код:
#include <sys/mman.h>
#include <fcntl.h>
...
struct my_structure *buf; /* just an example - can be arbitrary complex */
...
int fd = open("foo.bin", O_RDWR);
if (fd == -1) { /* if the file doesn't exist create your initial structure */
fd = open("foo.bin", O_RDWR | O_CREAT, 0700);
/* ... allocate enough space in the file or pre-fill with the structure ... */
/* (for safety you may do that in a separate process or using move-in atomically) */
}
buf = (struct my_structure*) mmap(0, sizeof(*buf), PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, 0);
...
/* memory in buf is now shared across all processes ... */
/* if you want to synchronize that shared memory with the file use msync, but it's not needed for the sharing */
msync(buf, sizeof(*buf), MS_ASYNC);
/* when you're done, unmap */
munmap(buf, sizeof(*buf));