Unix & C : IPC_PRIVATE , mémoire partagée

Bonjour,
j’aimerais tout d’abord savoir ce que signifie la macro IPC_PRIVATE et ce qu’elle permet de faire lorsque l’on l’utilise avec des sem shm msgq IPC. ( je n’ai trouvée aucune explication claire :slight_smile: ).

Enfin, j’aimerais connaitre le fonctionnement de la mémoire partager de façon simple, et plus particulièrement des fonctions shmat et shmdt. Comment bien les utiliser ?

Merci d’avance,
mike

La mémoire partagée aloue un segment de mémoire qui peut être accessible depuis n’importe quel programme.

Pour identifier ce segment de mémoire tu as un identificateur XYZ.
Lorsque un programme crée un espace mémoire partagé cet espace est dans un segment de mémoire indépendant de sa propre mémoire, et indépendant de n’importe quel autre programme.

Donc, le programme ne peut pas y accéder par défaut. Il faut qu’il dise au système ‘Je veux pouvoir accéder à cette zone de mémoire qui a lé clef XYZ’.

Pour celà il fait appel à shmat. shmat te renvoie un pointeur sur la zone en question. A priori l’espace est casté en void*, mais tu dois le caster dans le format des données que tu dois partager.

En général mieux vaut faire une structure qui rassemble tout les objets qui seront partagés entre les programme, pour simplifier les allocations.

Quand un programme a fini avec le segment partagé il peut le libérer avec shmdt, c’est à dire, signaler au système qu’il ne veut plus de ce segment dans sa mémoire perso.

man shmat pour l’utilisation

Pour IPC_PRIVATE ca te permet de spécifier les droits sur le la mémoire partagée (private : accessible aux programes de l’utilisateur et au groupe qui a créé l’espace partagé) man 5 ipc

Je me disais bien que tu allais répondre à ça.
Je n’ai rien à ajouter :slight_smile:

Ce message n’était pas conforme aux règles d’utilisation du nouveau forum :

:wink: