Bonjour j'ai besoin d'avoir en mémoire partagée une structure dynamique. Voici ma structure :
C'est donc une sorte de table de processus matérialisée par une liste doublement chainée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 typedef struct Maillon{ unsigned pid; unsigned short int priorite; unsigned long int dateS; //Date de soumission unsigned long int tpsExec; struct Maillon* next; struct Maillon* prev; }Maillon;
Ensuite je veu remplir une liste mais en mémoire partagée :
Je fait donc :
ceci est linitialisation, en suite je fai un fork() et pour tester ma memoire partagée, j'ajoute un élément dans le processus père et je tente d'afficher la liste dans le processus fils.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Maillon** premier; //un pointeur vers un pointeur sur un maillon soit le début de ma liste shmid=shmget(IPC_PRIVATE, sizeof(Maillon), 0666); //création de la memoire partagée (shmid est une variable globale) premier=(Maillon**)shmat(shmid,NULL,0); //attachement de mon segement
dans le pere je fai donc un appel à
voici le code de cette fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part Add(premier, 2,2,2);
J'imagine que je dois me mélanger les pinceaux dans les pointeurs...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 void Add(Maillon** m, int spid, int spriorite, int sdateS) { //Allocation memoire d'un nouveau Maillon Maillon *element=malloc(sizeof(Maillon)); //attachement d'un nouveau segment shmat(shmid,element,0); //insertion en tete de liste (ce maillon pren la place de l'ancienne tete de liste) (element)->pid = spid; (element)->priorite=spriorite; (element)->tpsExec=0; (element)->dateS=sdateS; (element)->next = *m; (element)->prev=NULL; if((element)->next!=NULL) { (element)->next->prev=element; } *m = element; }
Si quelqu'un pouvait jeter un coup d'oeil ca m'éviterais la pendaison....
Partager