shmget - phpMan

Command: man perldoc info search(apropos)  


SHMGET(2)                  Linux Programmer’s Manual                 SHMGET(2)



NAME
       shmget - allocates a shared memory segment

SYNOPSIS
       #include <sys/ipc.h>

       #include <sys/shm.h>

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

DESCRIPTION
       shmget()  returns  the  identifier of the shared memory segment associated with the
       value of the argument key.  A new shared memory segment, with  size  equal  to  the
       value  of  size  rounded  up  to a multiple of PAGE_SIZE, is created if key has the
       value IPC_PRIVATE or key isn’t IPC_PRIVATE, no shared memory segment  corresponding
       to  key  exists,  and IPC_CREAT is asserted in shmflg (i.e.  shmflg&IPC_CREAT isn’t
       zero).

       The value shmflg is composed of:

       SHM_HUGETLB used for allocating HUGETLB pages for shared memory.  IPC_CREAT to cre-
                   ate  a  new  segment. If this flag is not used, then shmget() will find
                   the segment associated with key and check to see if the user  has  per-
                   mission to access the segment.

       IPC_EXCL    used with IPC_CREAT to ensure failure if the segment already exists.

       mode_flags (lowest 9 bits)
                   specifying  the  permissions  granted  to  the owner, group, and world.
                   Presently, the execute permissions are not used by the system.

       If a new segment is created, the access permissions from shmflg are copied into the
       shm_perm  member  of the shmid_ds structure that defines the segment.  The shmid_ds
       structure has the following form:

            struct shmid_ds {
                struct ipc_perm shm_perm;    /* operation perms */
                size_t          shm_segsz;   /* size of segment (bytes) */
                time_t          shm_atime;   /* last attach time */
                time_t          shm_dtime;   /* last detach time */
                time_t          shm_ctime;   /* last change time */
                unsigned short  shm_cpid;    /* pid of creator */
                unsigned short  shm_lpid;    /* pid of last operator */
                short           shm_nattch;  /* no. of current attaches */
            };

            struct ipc_perm {
                key_t  key;
                ushort uid;   /* owner euid and egid */
                ushort gid;
                ushort cuid;  /* creator euid and egid */
                ushort cgid;
                ushort mode;  /* lower 9 bits of shmflg */
                ushort seq;   /* sequence number */
            };

       When creating a new shared memory segment, the system call initializes the shmid_ds
       data structure shmid_ds as follows:

              shm_perm.cuid and shm_perm.uid are set to the effective user-ID of the call-
              ing process.

              shm_perm.cgid and shm_perm.gid are set to  the  effective  group-ID  of  the
              calling process.

              The  lowest  order 9 bits of shm_perm.mode are set to the lowest order 9 bit
              of shmflg.

              shm_segsz is set to the value of size.

              shm_lpid, shm_nattch, shm_atime and shm_dtime are set to 0.

              shm_ctime is set to the current time.

       If the shared memory segment already exists, the access permissions  are  verified,
       and a check is made to see if it is marked for destruction.


SYSTEM CALLS
       fork() After a fork() the child inherits the attached shared memory segments.

       exec() After  an  exec()  all  attached  shared  memory  segments are detached (not
              destroyed).

       exit() Upon  exit()  all  attached  shared  memory  segments  are   detached   (not
              destroyed).


RETURN VALUE
       A valid segment identifier, shmid, is returned on success, -1 on error.

ERRORS
       On failure, errno is set to one of the following:

       EINVAL      if  a new segment was to be created and size < SHMMIN or size > SHMMAX,
                   or no new segment was to be created, a segment with given key  existed,
                   but size is greater than the size of that segment.

       EEXIST      if IPC_CREAT | IPC_EXCL was specified and the segment exists.

       ENOSPC      if all possible shared memory id’s have been taken (SHMMNI) or if allo-
                   cating a segment of the requested size would cause the system to exceed
                   the system-wide limit on shared memory (SHMALL).

       ENOENT      if  no  segment  exists for the given key, and IPC_CREAT was not speci-
                   fied.

       EACCES      if the user does not have permission to access the shared  memory  seg-
                   ment.

       ENOMEM      if no memory could be allocated for segment overhead.

NOTES
       IPC_PRIVATE isn’t a flag field but a key_t type.  If this special value is used for
       key, the system call ignores everything but the lowest order 9 bits of  shmflg  and
       creates a new shared memory segment (on success).

       The  followings  are  limits  on shared memory segment resources affecting a shmget
       call:

       SHMALL     System wide maximum of shared memory pages: policy dependent.

       SHMMAX     Maximum size in bytes for a shared memory segment: implementation depen-
                  dent (currently 4M).

       SHMMIN     Minimum size in bytes for a shared memory segment: implementation depen-
                  dent (currently 1 byte, though PAGE_SIZE is the effective minimum size).

       SHMMNI     System  wide  maximum  number  of shared memory segments: implementation
                  dependent (currently 4096, was 128 before Linux 2.3.99).

       The implementation has no specific limits for the per  process  maximum  number  of
       shared memory segments (SHMSEG).

BUGS
       The  name  choice  IPC_PRIVATE  was perhaps unfortunate, IPC_NEW would more clearly
       show its function.

CONFORMING TO
       SVr4, SVID.  SVr4 documents an additional error condition  EEXIST.   Until  version
       2.3.30  Linux  would return EIDRM for a shmget on a shared memory segment scheduled
       for deletion.

SEE ALSO
       ftok(3), ipc(5), shmctl(2), shmat(2), shmdt(2)



Linux 0.99.11                     1993-11-28                         SHMGET(2)

Generated by $Id: phpMan.php,v 4.55 2007/09/05 04:42:51 chedong Exp $ Author: Che Dong
On Apache/1.3.41 (Unix) PHP/5.2.5 mod_perl/1.30 mod_gzip/1.3.26.1a
Under GNU General Public License
2009-01-10 11:07 @38.103.63.58 CrawledBy CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
Valid XHTML 1.0!Valid CSS!