Bonjour
J'ai un terrible probleme d'IPC et de memoire partagee.
Je cree un pere qui execute le code suivant :
Code :
- #define MAX_CARRE 50
- key_t cle;
- long* pseg;
- // FTOK => Preparation de la clef pour ouvrir la memoire partagee
- cle = ftok("pere.c",1);
- if (cle == -1)
- tt_err("\n\t CLE shm impossible",-1);
- // SHMGET => ouverture de la memoire partagee
- shmid = shmget(cle,(sizeof(long)*MAX_CARRE),0);
- if (shmid == -1)
- tt_err("\n\t SHMGET impossible ",-1);
- // SHMAT => Attacnehement du segment memoire au pointeur pseg
- pseg = (long*)shmat(shmid,0,SHM_RDONLY);
|
Ce pere lance la creation d'un fils qui s'execute sur un autre code.
Dans le fils je fais :
Code :
- #define MAX_CARRE 50
- key_t cle;
- long* pseg;
- // FTOK => Preparation de la clef pour ouvrir la memoire partagee
- cle = ftok("pere.c",1);
- if (cle == -1)
- tt_err("\n\t CLE shm impossible",-1);
- // SHMGET => ouverture de la memoire partagee
- shmid = shmget(cle,(sizeof(long)*MAX_CARRE),IPC_CREAT|0600);
- if (shmid == -1)
- tt_err("\n\t SHMGET impossible ",-1);
- // SHMAT => Attacnehement du segment memoire au pointeur pseg
- pseg = (long*)shmat(shmid,0,0);
|
Ensuite quand j'essais de mettre en memoire une donnee de type long pour ensuite la lire cote pere, je ne retrouve pas mes petits.
J'ai mis en place des printf pour debugger et OH horreur ....
les adresses memoires pointes par pseg cote fils ne sont pas les meme que cote pere..... comment ce fait ce ????
voici une copie des printf cote fils
Code :
- printf("\n\t F1 cle %p\n",cle);
- printf("\n\t F1 shmid %d\n",shmid);
- printf("\n\t F1 Segmem %p\n",pseg);
|
voici une copie des printf cote pere
Code :
- printf("\n\t PERE cle %p\n",cle);
- printf("\n\t PERE shmid %d\n",shmid);
- printf("\n\t PERE Segmem %p\n",pseg);
|
LEs clefs sont identiques, les shmid aussi, mais pas l'aderesse pointee par pseg.....
Helpppppppppppppppppppppppppppppp
je m'arrache les cheveux ... deja que je n'en ai plus des masses :-)
Dans tous mes modules j'ai les includes quivants
Code :
- #include<sys/ipc.h>
- #include<sys/shm.h>
|
Derniere info, je travaille sur une knoppix bootable depuis un CD...
Je ne sais pas si ca importe beaucoup, mais au cas ou ...
MErci pour votre aide