Как сохранить узлы списка в разделяемой памяти - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь заставить многих клиентов взаимодействовать друг с другом через множество терминалов. У меня есть вилки в моей программе, и я создаю каналы, чтобы клиенты могли читать / писать из / в других клиентов. Поскольку я создаю много процессов, мне нужна общая памятьхранить некоторую информацию и, в частности, я хочу хранить узлы, которые создаются из каждого ребенка. Как я могу это сделать?

Это моя структура:

typedef struct client{
    char *numofclient;
    struct client *nextclient;
}client;

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Я думаю, что вы можете сделать systemV разделяемой памятью, используя shmget, читая справочные страницы.Вы можете определить верхний предел того, сколько Process будет создано, и предоставить такой размер в соответствии с shmget.Поэтому, когда ваш дочерний процесс хочет сохранить список, он может просто присоединиться к общей памяти и добавить свои данные в общую память.

0 голосов
/ 11 апреля 2019

Прежде чем разветвляться, создайте область общей памяти с помощью mmap.Прочитайте справочную страницу и используйте общие флаги.Если в Windows все по-другому, так что ищите VirtualAlloc и, конечно, вы не можете разветвляться.

Вам понадобится распределитель памяти для вашей общей памяти.Это может быть очень просто: просто увеличивайте указатель на символ для выделения и никогда ничего не освобождайте.Или это может быть так сложно, как вы хотите.Вы можете найти библиотеку в Интернете.

Если вам нужен мьютекс, создайте его в области общей памяти и обязательно используйте флаги для общего мьютекса.

Поскольку вы разветвляетесьВы можете использовать указатели, потому что совместно используемая память будет оставаться на месте в каждой копии процесса.В противном случае вам нужно будет использовать смещения с начала карты.

...