Tu nous donnes trop peu d'informations pour que l'on puisse te répondre. Il nous faudrait le code entier, s'il est raisonnablement long. On ne sait pas quand les processus sont créés, etc.
Quoiqu'il en soit, il n'y a rien qui nous laisse à penser que « tab_nat » est initialisé avec le retour de shmat(). Si c'est une structure que tu as créée avant de forker, alors ton nouveau processus en a hérité d'une copie, mais les deux instances restent indépendantes.
D'autre part, dans :
shmid = shmget(CLE_IPC, sizeof(tab_nat), 0666 | IPC_CREAT)
- tab_nat est un pointeur. Pas un tableau déclaré comme tel. La taille de ton segment partagé sera donc celle d'un pointeur (quatre octets), et pas celle d'une structure « nat » ;
- shmget() va, ici, créer un segment de mémoire partagée, qui pourra ensuite être rattaché sur demande à un ou plusieurs processus. Il s'agit d'allocation de mémoire comme le fait malloc(). En aucun cas tu ne vas partager la structure existante pointée par tab_nat.
Partager