shmop(S)
shmop: shmat, shmdt --
shared memory operations
Syntax
cc . . . -lc
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);
int shmdt(const void *shmaddr);
Description
shmat-
attaches shared memory segment
shmdt-
detaches shared memory segment
The shmat system call
attaches the shared memory segment associated with the shared
memory identifier specified by 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 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}.
shmat
fails and does not attach the shared memory segment if one or more of the
following is true:
[EACCES]-
Operation permission is denied to the calling process (see
Intro(S)).
[EINVAL]-
shmid is not a valid shared memory identifier.
[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.
[EINVAL]-
shmdt fails and does not detach the shared memory segment if
shmaddr
is not the data segment start address of a shared memory segment.
[EMFILE]-
The number of shared memory segments attached to the calling process would
exceed the system-imposed limit.
[ENOMEM]-
The available data space
is not large enough to accommodate the shared memory segment.
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.
See also
exec(S),
exit(S),
fork(S),
shmctl(S),
shmget(S)
Standards conformance
shmat and shmdt are conformant with:
X/Open Portability Guide, Issue 3, 1989
.
© 2003 Caldera International, Inc. All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003