Provided by: freebsd-manpages_8.2-1_all bug


     shmget — obtain a shared memory identifier


     Standard C Library (libc, -lc)


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

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


     Based on the values of key and flag, shmget() returns the identifier of a
     newly created or previously existing shared memory segment.  The key is
     analogous to a filename: it provides a handle that names an IPC object.
     There are three ways to specify a key:

     ·   IPC_PRIVATE may be specified, in which case a new IPC object will be

     ·   An integer constant may be specified.  If no IPC object corresponding
         to key is specified and the IPC_CREAT bit is set in flag, a new one
         will be created.

     ·   The ftok(3) may be used to generate a key from a pathname.

     The mode of a newly created IPC object is determined by OR'ing the
     following constants into the flag argument:

     SHM_R         Read access for user.

     SHM_W         Write access for user.

     (SHM_R>>3)    Read access for group.

     (SHM_W>>3)    Write access for group.

     (SHM_R>>6)    Read access for other.

     (SHM_W>>6)    Write access for other.

     When creating a new shared memory segment, size indicates the desired
     size of the new segment in bytes.  The size of the segment may be rounded
     up to a multiple convenient to the kernel (i.e., the page size).


     Upon successful completion, shmget() returns the positive integer
     identifier of a shared memory segment.  Otherwise, -1 is returned and
     errno set to indicate the error.


     The shmget() system call will fail if:

     [EINVAL]           Size specified is greater than the size of the
                        previously existing segment.  Size specified is less
                        than the system imposed minimum, or greater than the
                        system imposed maximum.

     [ENOENT]           No shared memory segment was found matching key, and
                        IPC_CREAT was not specified.

     [ENOSPC]           The kernel was unable to allocate enough memory to
                        satisfy the request.

     [EEXIST]           IPC_CREAT and IPC_EXCL were specified, and a shared
                        memory segment corresponding to key already exists.


     shmat(2), shmctl(2), shmdt(2), ftok(3)