SHMOP(2) DOMAIN/IX SYS5 SHMOP(2)
NAME
shmop - shared memory operations
USAGE
#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 shmid to the data segment 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 the system selects.
⊕ If shmaddr is not equal to zero and
(shmflg & SHM_RND)
is "true", the segment is attached at the address given
by
(shmaddr - (shamddr mod SHMLBA))
⊕ If shmaddr is not equal to zero and
(shmflg & SHM_RND)
is "false", the segment is attached at the address given
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}.
Printed 12/4/86 SHMOP-1
SHMOP(2) DOMAIN/IX SYS5 SHMOP(2)
RETURN VALUES
Upon successful completion, shmat returns the data segment
start address of the attached shared memory segment, and
shmdt returns a value of zero. A failed call returns -1 and
sets errno as indicated below.
ERRORS
Shmat will fail and not attach the shared memory segment if
one or more of the following is true:
[EINVAL] Shmid is not a valid shared memory identifier.
[EACCES] Operation permission is denied to the calling pro-
cess (see intro(2)).
[ENOMEM] The available data space is not large enough to
accommodate the shared memory segment.
[EINVAL] Shmaddr is not equal to zero, and the value of
(shmaddr - (shamddr mod 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.
Shmdt will fail and not detach the shared memory segment if
[EINVAL] Shmdt detaches from the calling process's data
segment the shared memory segment located at the
address specified by shmaddr.
[EINVAL] Shmaddr is not the data segment start address of a
shared memory segment.
RELATED INFORMATION
exec(2), exit(2), fork(2), shmctl(2), shmget(2)
SHMOP-2 Printed 12/4/86