Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

exit(2)

fork(2)

intro(2)

shmctl(2)

shmget(2)



SHMOP(2-SysV)       RISC/os Reference Manual        SHMOP(2-SysV)



NAME
     shmop: shmat, shmdt - shared memory operations

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

     char *shmat (shmid, shmaddr, shmflg)
     int shmid;
     char *shmaddr;
     int shmflg;

     int shmdt (shmaddr)
     char *shmaddr;

DESCRIPTION
     shmat attaches the shared memory segment associated with the
     shared memory identifier specified by shmid to the data seg-
     ment of the calling process.  The segment is attached at the
     address specified by one of the following criteria:

          If shmaddr is equal to zero, the segment is attached at
          the first available address as selected by the system.

          If shmaddr is not equal to zero and (shmflg & SHM_RND)
          is ``true'', the segment is attached at the address
          given by (shmaddr - (shmaddr modulus SHMLBA)).

          If shmaddr is not equal to zero and (shmflg & SHM_RND)
          is ``false'', the segment is attached at the address
          given by shmaddr.

     shmdt detaches from the calling process's data segment the
     shared memory segment located at the address specified by
     shmaddr.

     The segment is attached for reading if (shmflg & SHM_RDONLY)
     is ``true'' {READ}, otherwise it is attached for reading and
     writing {READ/WRITE}.

ERRORS
     shmat will fail and not attach the shared memory segment if
     one or more of the following are true:

     [EINVAL]            shmid is not a valid shared memory iden-
                         tifier.

      [EACCES]           Operation permission is denied to the
                         calling process [see intro(2)].

     [ENOMEM]            The available data space is not large



                         Printed 1/15/91                   Page 1





SHMOP(2-SysV)       RISC/os Reference Manual        SHMOP(2-SysV)



                         enough to accommodate the shared memory
                         segment.

     [EINVAL]            shmaddr is not equal to zero, and the
                         value of (shmaddr - (shmaddr modulus
                         SHMLBA)) is an illegal address.

     [EINVAL]            shmaddr is not equal to zero, (shmflg &
                         SHM_RND) is ``false'', and the value of
                         shmaddr is an illegal address.

     [EMFILE]            The number of shared memory segments
                         attached to the calling process would
                         exceed the system-imposed limit.

     [EINVAL]            shmdt will fail and not detach the
                         shared memory segment if shmaddr is not
                         the data segment start address of a
                         shared memory segment.

SEE ALSO
     exec(2), exit(2), fork(2), intro(2), shmctl(2), shmget(2).

DIAGNOSTICS
     Upon successful completion, the return value is as follows:

          shmat returns the data segment start address of the
          attached shared memory segment.

          shmdt returns a value of 0.

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

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


















 Page 2                  Printed 1/15/91



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