Я создаю клиент-серверную программу, которая использует сокеты для подключения, как только клиент подключился к серверу, для клиента создается новый процесс (требуется для проекта). У меня есть связанный список на сервере, который хранит структуры клиентов, хранящие информацию о них.
Проблема, которая возникла при этом, заключается в том, что при подключении, например, 2 клиентов, каждый клиент может просматривать только ту версию связанного списка, которая содержит только там детали. Поэтому я пытаюсь создать сегмент совместно используемой памяти, который содержит связанный список, но я новичок в разделяемой памяти и изо всех сил пытаюсь заставить его работать.
node_t *client_list = NULL;
int main() {
int shmid;
key_t key;
key = 1234;
shmid = shmget(key, SHMSZ, IPC_CREAT | 0666);
client_list = (node_t *) shmat(shmid, (void *)0, 0);
while(1) {
pid_t current_process;
if ((current_process = fork()) == 0) {
node_add(client_list, &client);
node_print(client_list);
pthread_create(&thread[client_count], NULL, network(client.ID), (void *) &client);
}
return 0;
}
(я оставил код подключения к сокету и т. Д. Отключенным, чтобы сделать его более читаемым). Возможно, я делаю что-то очень неправильное в этой текущей версии, но, насколько я понимаю, я создаю сегмент совместно используемой памяти для 'node_t * client_list', который представляет собой связанный список, а затем, после создания нового процесса из соединения, к нему добавляется клиентский узел,Любая помощь будет принята с благодарностью.