shmget - get shared memory segment identifier


     #include <sys/types.h>
     #include <sys/ipc.h>
     #include <sys/shm.h>

     int shmget(key_t key, size_t size, int shmflg);


     The shmget() function returns the shared  memory  identifier
     associated with key.

     A shared memory identifier and associated data structure and
     shared  memory segment of at least size bytes (see intro(2))
     are created for key if one of the following are true:

        o  The key argument is equal to IPC_PRIVATE.

        o  The key argument does not already have a shared memory
           identifier  associated with it, and (shmflg&IPC_CREAT)
           is true.

     Upon creation, the data structure associated  with  the  new
     shared memory identifier is initialized as follows:

        o  The    values    of    shm_perm.cuid,    shm_perm.uid,
           shm_perm.cgid,  and  shm_perm.gid are set equal to the
           effective user ID  and  effective  group  ID,  respec-
           tively, of the calling process.

        o  The access permission bits of  shm_perm.mode  are  set
           equal   to  the  access  permission  bits  of  shmflg.
           shm_segsz is set equal to the value of size.

        o  The values  of  shm_lpid,  shm_nattch  shm_atime,  and
           shm_dtime are set equal to 0.

        o  The shm_ctime is set equal to the current time.

     Shared memory segments must be explicitly removed after  the
     last reference to them has been removed.


     Upon   successful   completion,   a   non-negative   integer
     representing  a shared memory identifier is returned. Other-
     wise, -1 is returned and errno is set to indicate the error.


     The shmget() function will fail if:

           A shared memory identifier exists for key  but  opera-
           tion  permission  (see  intro(2))  as specified by the
           low-order 9 bits of shmflg would not be granted.

           A shared memory identifier exists  for  key  but  both
           (shmflg&IPC_CREAT) and (shmflg&IPC_EXCL) are true.

           The size argument  is  less  than  the  system-imposed
           minimum or greater than the system-imposed maximum.

           A shared memory identifier exists for key but the size
           of  the  segment  associated with it is less than size
           and size is not equal to 0.

           A shared memory identifier does not exist for key  and
           (shmflg&IPC_CREAT) is false.

           A  shared  memory  identifier  and  associated  shared
           memory  segment  are  to  be created but the amount of
           available  memory  is  not  sufficient  to  fill   the

           A shared memory identifier is to be  created  but  the
           system-imposed  limit on the maximum number of allowed
           shared  memory  identifiers   system-wide   would   be


     When a UFS file system is mounted with logging enabled, file
     system  transactions  that  free blocks from files might not
     actually add those freed blocks to the  file  system's  free
     list  until  some  unspecified  time  in  the  future.  This
     behavior improves file system performance but does not  con-
     form  to the POSIX, Single UNIX Specification, SPARC Confor-
     mance Definition, System  V  Application  Binary  Interface,
     System  V Interface Definition, and X/Open Portability Guide
     Standards, which  require  that  freed  space  be  available
     immediately.  To enable standards conformance regarding file
     deletions or to address the problem of  not  being  able  to
     grow  files  on a relatively full UFS file system even after
     files  have  been  deleted,   disable   UFS   logging   (see


     mount_ufs(1M), intro(2), shmctl(2), shmop(2), ftok(3C)

Man(1) output converted with man2html