Совместное использование памяти кучи с помощью fork ()

Я работаю над реализацией сервера баз данных в C, который будет обрабатывать запросы от нескольких клиентов. Для этого я использую fork () для обработки соединений для отдельных клиентов.

Сервер хранит данные в куче, которая состоит из корневого указателя на хеш-таблицы динамически размещаемых записей. Записи являются структурами, которые имеют указатели на различные типы данных. Я хотел бы, чтобы процессы могли обмениваться этими данными, чтобы когда клиент вносил изменения в кучу, изменения были видны другим клиентам.

Я узнал, что fork () используетCOW (Копировать при записи) и я понимаю, что он скопирует кучу (и стек) памяти родительского процесса, когда ребенок попытается изменить данные в памяти.

Я обнаружил, что могу использовать библиотеку shm для совместного использования памяти.

- Достаточно ли будет поделиться корневым указателем базы данных или мне нужно сделать всю выделенную память общей?

-Если ребенок выделит память, сможет ли родитель / другие дети получить к ней доступ?

-Также если ребенок выделяет память и позже ее убивают, будет ли выделенная память все еще оставаться в куче?

Так, например, будет ли приведенный ниже код правильным способом использовать кучу памяти (в shared_string)? Если бы ребенок использовал аналогичный код (т. Е. Начиная с // start), могли бы другие дети читать / писать в него, пока ребенок работает и после его смерти?

key_t key;
int shmid;

key = ftok("/tmp",'R');
shmid = shmget(key, 1024, 0644 | IPC_CREAT);

//start
char * string;
string = malloc(sizeof(char) * 10);

strcpy(string, "a string");

char * shared_string;

shared_string = shmat(shmid, string, 0);

strcpy(shared_string, string);

Ответы на вопрос(5)

Ваш ответ на вопрос