J'écris un programme serveur où il reçoit un message du client et un message diffusé à tous les clients précédents. J'ai besoin de créer une mémoire partagée entre les processus, mais il semble que la mémoire partagée ne fonctionne pas.La mémoire partagée n'est pas partagée entre les processus
Voici mon code:
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);
}
Lorsque je modifie liste_noms dans le processus d'enfants, il semble que cette modification ne se voit pas par d'autres procédés. Quelqu'un peut-il donner des suggestions? Merci!! MISE À JOUR: J'ai essayé de changer à ceci comme suggéré, mais ne fonctionne toujours pas.
name_list = (char*) shmat(shmid2, (void *)0, 0) ;
Quelqu'un peut-il m'aider? Merci beaucoup!
1: s'il vous plaît corriger l'indentation, il est difficile de lire votre code. 2: comment modifiez-vous name_list? modifier la mémoire pointée par elle, ou modifier la variable? BTW, s'il vous plaît inclure les déclarations variables – Javier
fixe. Avez-vous une idée pourquoi cela ne marche pas? – QiLi