GNU Info

Info Node: (ipc.info)example

(ipc.info)example


Next: perms Prev: Overview Up: Overview
Enter node , (file) or (file)node

example
=======

   Here is a code fragment with pointers on how to use shared memory.
The same methods are applicable to other resources.

   In a typical access sequence the creator allocates a new instance of
the resource with the `get' system call using the IPC_CREAT flag.

creator process:
     #include <sys/shm.h>
     int id;
     key_t key;
     char proc_id = 'C';
     int size = 0x5000;	/* 20 K */
     int flags = 0664 | IPC_CREAT;		/* read-only for others */
     
     key = ftok ("~creator/ipckey", proc_id);
     id = shmget (key, size, flags);
     exit (0);	/* quit leaving resource allocated */

Users then gain access to the resource using the same key.
Client process:
     #include <sys/shm.h>
     char *shmaddr;
     int id;
     key_t key;
     char proc_id = 'C';
     
     key = ftok ("~creator/ipckey", proc_id);
     
     id = shmget (key, 0, 004);		/* default size   */
     if (id == -1)
           perror ("shmget ...");
     
     shmaddr = shmat (id, 0, SHM_RDONLY); /* attach segment for reading */
     if (shmaddr == (char *) -1)
           perror ("shmat ...");
     
     local_var = *(shmaddr + 3); 	/* read segment etc. */
     
     shmdt (shmaddr);		/* detach segment */

When the resource is no longer needed the creator should remove it.
Creator/owner process 2:
     key = ftok ("~creator/ipckey", proc_id)
     id = shmget (key, 0, 0);
     shmctl (id, IPC_RMID, NULL);


automatically generated by info2www version 1.2.2.9