53 lines
1.3 KiB
C
53 lines
1.3 KiB
C
/* Mecanismes de communication entre processus - IPC */
|
|
/* Creation d'une zone de mémoire interne partajée (shared memory - shm ) */
|
|
#include <stdlib.h>
|
|
#include <sys/ipc.h>
|
|
#include <sys/shm.h>
|
|
#include <stdio.h>
|
|
|
|
#define SHMEM_SIZE 256
|
|
#define SHMEM_RIGHTS 0x01ff
|
|
|
|
/* dimension de la zone : 255 octets */
|
|
/* droits d'accès dans la zone de mémore partagée: 1ff */
|
|
/* on nn'utilisera que le premier entier long pour l'exemple */
|
|
|
|
|
|
int main (int argc, char ** argv) {
|
|
|
|
/* l'identificateur externe (key) de la zone de mémoire partagée
|
|
est un nombre entier transmis en paramètre par l'utilisateur */
|
|
|
|
int ipc_key ;
|
|
|
|
int ipc_result ;
|
|
char * pnl ;
|
|
int i;
|
|
|
|
if (argc<2)
|
|
exit(1);
|
|
|
|
ipc_key = atoi(argv[1]) ;
|
|
|
|
/* creation de la zone commune : primitive shmget (....) */
|
|
|
|
ipc_result = shmget(ipc_key, SHMEM_SIZE, IPC_CREAT|IPC_EXCL|SHMEM_RIGHTS) ;
|
|
|
|
if (ipc_result != -1) {
|
|
printf(" - Succes !! -\n");
|
|
|
|
/* attachement à la zone de mémoire partagée : shmat (....) */
|
|
|
|
pnl = (char*)shmat(ipc_result, 0, SHMEM_RIGHTS) ;
|
|
|
|
/* initialisation avec 0 de la zone de mémoire partagée */
|
|
for (i=0;i<SHMEM_SIZE;i++)
|
|
pnl[i]='\0' ;
|
|
}
|
|
else
|
|
printf(" Erreur :%d \n",ipc_result);
|
|
|
|
exit(0) ;
|
|
}
|
|
|