*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> shmctl (2)              
Title
Content
Arch
Section
 

SHMCTL(2)

Contents


NAME    [Toc]    [Back]

     shmctl - shared memory control operations

SYNOPSIS    [Toc]    [Back]

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

     int
     shmctl(int shmid, int cmd, struct shmid_ds *buf);

DESCRIPTION    [Toc]    [Back]

     The shmctl() system call performs some control operations on
the shared
     memory area specified by shmid.

     Each  shared  memory segment has a data structure associated
with it, parts
     of which may be altered by shmctl() and parts of  which  determine the actions
 of shmctl().

     This structure is defined as follows in <sys/shm.h>:

     struct shmid_ds {
             struct  ipc_perm  shm_perm;     /* operation permissions */
             int             shm_segsz;    /* size of segment  in
bytes */
             pid_t            shm_lpid;     /* pid of last shm op
*/
             pid_t           shm_cpid;     /* pid of creator */
             short           shm_nattch;   /* #  of  current  attaches */
             time_t          shm_atime;    /* last shmat() time*/
             time_t          shm_dtime;    /* last  shmdt()  time
*/
             time_t          shm_ctime;    /* last change by shmctl() */
             void            *shm_internal; /* sysv stupidity */
     };

     The ipc_perm  structure used inside the shmid_ds   structure
is defined in
     <sys/ipc.h> and looks like this:

     struct ipc_perm {
             uid_t           cuid;   /* creator user id */
             gid_t           cgid;   /* creator group id */
             uid_t           uid;    /* user id */
             gid_t           gid;    /* group id */
             mode_t            mode;    /*  r/w  permission  (see
chmod(2)) */
             u_short         seq;    /* sequence #  (to  generate
unique msg/sem/shm id) */
             key_t              key;       /*    user   specified
msg/sem/shm key */
     };

     The operation to be performed by shmctl()  is  specified  in
cmd and is one
     of:

     IPC_STAT    Gather  information about the shared memory segment and place
                it in the structure pointed to by buf.

     IPC_SET    Set the value of the  shm_perm.uid,  shm_perm.gid
and
                shm_perm.mode  fields in the structure associated
with shmid.
                The  values  are  taken  from  the  corresponding
fields in the
                structure  pointed to by buf.  This operation can
only be executed
 by the superuser, or a process that has  an
effective user
   ID   equal   to   either   shm_perm.cuid  or
shm_perm.uid in the data
 structure associated with  the  shared  memory
segment.

     IPC_RMID    Remove  the  shared  memory segment specified by
shmid and destroy
 the data associated with it.  Only the  superuser or a
                process  with  an  effective  UID  equal  to  the
shm_perm.cuid or
                shm_perm.uid values in the data structure associated with the
                queue can do this.

     The read and write permissions on a shared memory identifier
are determined
 by the shm_perm.mode field in the same way as is  done
with files
     (see  chmod(2)),  but the effective UID can match either the
shm_perm.cuid
     field or the shm_perm.uid field, and the effective  GID  can
match either
     shm_perm.cgid or shm_perm.gid.

RETURN VALUES    [Toc]    [Back]

     Upon  successful completion, a value of 0 is returned.  Otherwise, -1 is
     returned and the global variable errno is  set  to  indicate
the error.

ERRORS    [Toc]    [Back]

     shmctl() will fail if:

     [EPERM]        cmd  is  equal to IPC_SET or IPC_RMID and the
caller is not
                   the superuser,  nor  does  the  effective  UID
match either the
                   shm_perm.uid  or  shm_perm.cuid  fields of the
data structure
                   associated with the shared memory segment.

                   An attempt is made to increase  the  value  of
shm_qbytes
                   through  IPC_SET but the caller is not the superuser.

     [EACCES]      The command is IPC_STAT and the caller has  no
read permission
 for this shared memory segment.

     [EINVAL]       shmid  is  not  a valid shared memory segment
identifier.

                   cmd is not a valid command.

     [EFAULT]      buf specifies an invalid address.

SEE ALSO    [Toc]    [Back]

      
      
     shmat(2), shmget(2)

OpenBSD     3.6                         August      17,      1995
[ Back ]
 Similar pages
Name OS Title
shmctl Tru64 Perform shared memory control operations
shmctl FreeBSD shared memory control
shmctl Linux shared memory control
shmop Linux shared memory operations
shmat HP-UX shared memory operations
shmdt HP-UX shared memory operations
shmop IRIX shared memory operations
shmop HP-UX shared memory operations
shm_open FreeBSD open or create a shared memory object shm_unlink -- remove a shared memory object
shmdt OpenBSD map/unmap shared memory
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service