Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

shmget(2)

shmop(2)



  shmctl(2)                           CLIX                           shmctl(2)



  NAME

    shmctl - Shared memory control operations

  LIBRARY

    Standard C Library (libc.a)

  SYNOPSIS

    #include <sys/types.h>

    #include <sys/ipc.h>

    #include <sys/shm.h>

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

  PARAMETERS

    shmid   Specifies a shared memory segment identifier obtained from a
            successful call to the shmget() function.

    cmd     Specifies a memory control operation.

    buf     Points to the data structure where control operations are to find
            or put data.

  DESCRIPTION

    The shmctl() function provides a variety of shared memory control
    operations as specified by cmd .  The following cmds are available:

    IPC_STAT     Places the current value of each member of the data structure
                 associated with shmid into the structure pointed to by buf.
                 The contents of this structure are defined in intro(2).

    IPC_SET      Sets the value of the following members of the data structure
                 associated with shmid to the corresponding value found in the
                 structure pointed to by buf:

                 shm_perm.uid
                 shm_perm.gid
                 shm_perm.mode /* only low 9 bits */


                 This cmd can only be executed by a process that has an
                 effective user ID equal to that of superuser, or to the value



  2/94 - Intergraph Corporation                                              1






  shmctl(2)                           CLIX                           shmctl(2)



                 of shm_perm.cuid or shm_perm.uid in the data structure
                 associated with shmid.

    IPC_RMID     Removes the shared memory identifier specified by shmid from
                 the system and destroys the shared memory segment and data
                 structure associated with it.  This cmd can only be executed
                 by a process that has an effective user ID equal to that of
                 superuser, or to the value of shm_perm.cuid or shm_perm.uid
                 in the data structure associated with shmid.

    SHM_LOCK     Locks the shared memory segment specified by shmid in memory.
                 This cmd can only be executed by a process that has an
                 effective user ID equal to superuser.

    SHM_UNLOCK   Unlocks the shared memory segment specified by shmid.  This
                 cmd can only be executed by a process that has an effective
                 user ID equal to superuser.

  EXAMPLES

    1.  To set the mode of a shared memory segment to be read/write for the
        owner:

        struct shmid_ds buf;

        buf.shm_perm.mode = 0600;
        if (shmctl(shmid, IPC_SET, &buf) < 0)
             perror("IPC_STAT failed");


    2.  To remove a shared memory segment:

        int shmid;

        if (shmctl(shmid, IPC_RMID, (struct shmid_ds *)0) < 0)
             perror("Could not remove shared memory");


  NOTES

    The user must explicitly remove shared memory segments after the last
    reference to them has been removed.

  RETURN VALUES

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

  ERRORS

    The shmctl() function fails if one or more of the following are true:



  2                                              Intergraph Corporation - 2/94






  shmctl(2)                           CLIX                           shmctl(2)



    [EINVAL]    The value of shmid is not a valid shared memory identifier.

    [EINVAL]    The value of cmd is not a valid command.

    [EACCES]    The value of cmd is equal to IPC_STAT and operation permission
                is denied to the calling process.  (See intro().)

    [EPERM]     The value of cmd is equal to IPC_RMID or IPC_SET and the
                effective user of the calling process is not equal to that of
                superuser, or to the value of shm_perm.cuid or shm_perm.uid in
                the data structure associated with shmid.

    [EPERM]     The value of cmd is equal to SHM_LOCK or SHM_UNLOCK and the
                effective user of the calling process is not equal to that of
                superuser.

    [EFAULT]    The value of buf is a pointer to an illegal address.

    [ENOMEM]    The value of cmd is equal to SHM_LOCK and there is not enough
                memory.

  RELATED INFORMATION

    Functions:  shmget(2), shmop(2)






























  2/94 - Intergraph Corporation                                              3




Typewritten Software • bear@typewritten.org • Edmonds, WA 98026