Bonjour j'ai besoin d'avoir en mémoire partagée une structure dynamique. Voici ma structure :

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;
C'est donc une sorte de table de processus matérialisée par une liste doublement chainée

Ensuite je veu remplir une liste mais en mémoire partagée :
Je fait donc :
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
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.

dans le pere je fai donc un appel à
voici le code de cette fonction

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;
 
}
J'imagine que je dois me mélanger les pinceaux dans les pointeurs...

Si quelqu'un pouvait jeter un coup d'oeil ca m'éviterais la pendaison....