Совместное использование памяти кучи с помощью 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);