Я пишу серверную программу, где он получает сообщение от клиента и широковещательное сообщение всем предыдущим клиентам. Мне нужно создать общую память между процессами, но кажется, что разделяемая память не работает.общая память не используется между процессами
Вот мой код:
int shmid2; key_t key2; void* shm2;
string name_list;
key2=ftok("tmp",'d');
//create
if ((shmid2 = shmget (key2, sizeof(char)*1000, IPC_CREAT | 0666)) < 0) {
perror("shmget2");
exit(1);}
//attach
shm2 = shmat(shmid2, (void *)0, 0) ;
name_list= (char*) shm2;
if (shm2 == (char *) -1) {
perror("shmat2");
exit(1);}
... do other things...
switch (pid=fork()){
case -1:
{ perror("ERROR on fork");
break;}
case 0://children
{
...modify name_list by getting message and append message to name_list..
name_list.append(message);
break;}
default://parent
close(connection);
}
Когда я изменяю NAME_LIST в процессе детей, кажется, что эта модификация не рассматривается другими процессами. Может ли кто-нибудь дать какие-либо предложения? Благодаря!!
UPDATE: Я попытался изменить это, как было предложено, но все еще не работает.
name_list = (char*) shmat(shmid2, (void *)0, 0) ;
Любой может мне помочь? Большое спасибо!
1: исправьте углубление, его трудно прочитать. 2: как вы «изменяете имя_лист»? изменить указанную им память или изменить переменную? BTW, пожалуйста, включите объявления переменных – Javier
исправлено. У вас есть идеи, почему это не работает? – QiLi