La mémoire partagée (sous UNIX)
        (/usr/include/sys/ipc.h, /usr/include/sys/types.h, /usr/include/sys/shm.h)

Objectif: Partager de la mémoire entre processus. L'accès en exclusion mutuelle et la destruction de la zone partagée sont à la charge de l'utilisateur.

Opérations:

int shmget(key_t cle, int taille, int shmflg): Renvoie l'identificateur de la mémoire partagée de clé externe unique cle. Si la mémoire partagée n'existe pas et si shmflg contient  IPC_CREAT , shmget la crée avec les droits d'accès définis dans semflg . Cette fonction renvoie -1 si erreur.
exemple:
    Num=shmget(1000, 12, 0666|IPC_CREAT); crée une mémoire partagée de clé externe 1000 de taille 12 octets. Num est la clé interne.

char* shmat(int shmid, char* shmaddr, int shmflg): Attache la mémoire partagée shmid à  l'adresse shmaddr et renvoie un pointeur sur cette zone. Si shmaddr est NULL le système cherche une adresse libre. shmflg indique le type d'accès (lecture seule, lecture écriture (par défaut)).
exemple:
    int *N = (int *) shmat(Num, NULL, 0);      Attache la zone de la mémoire partagée Num à un pointeur d'entier N.

int shmctl(int shmid, int cmd, struct shmid_ds* buf): Pour consulter, modifier les caractéristiques ou détruire (IPC_RMID) une mémoire partagée.
exemple:
      semctl(Num, 0, IPC_RMID, 0);        détruit  la mémoire partagée de clé interne num.

char* shmdt(char* shmaddr)
:
Détache la mémoire partagée du processus (mais elle continue à exister). shmaddr est l'adresse rendue par shmat.

suivant       plan