HP-UX Reference (11i v1 00/12) - 2 System Calls (vol 5)

__________________________________________________________________________________________________________________________________________________________________________________________________
__________________________________________________________________________________________________________________________________________________________________________________________________
STANDARD Printed by: Nora Chuang [nchuang] STANDARD
/build/1111/BRICK/man2/!!!intro.2
________________________________________________________________
___ ___
s
shmop(2) shmop(2)
NAME
shmat(), shmdt() - shared memory operations
SYNOPSIS
#include <sys/shm.h>
void *shmat(int shmid, void *shmaddr, int shmflg);
int shmdt(void *shmaddr);
DESCRIPTION
shmat() 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 for reading if (shmflg & SHM_RDONLY) is "true"; otherwise, it is attached for read-
ing and writing. It is not possible to attach a segment for write only.
If the shared memory segment has never been attached to by any process prior to the current shmat()
call, shmaddr must be specified as zero and the segment is attached at a location selected by the operating
system. That location is identical in all processes accessing that shared memory object. Once the operating
system selects a location for a shared memory segment, the same location will be used across any subse-
quent shmat() and shmdt() calls on the segment until it is removed by the
IPC_RMID operation of
shmctl().
If this is not the first shmat() call on the shared memory segment throughout the system, shmaddr must
either be zero or contain a nonzero address that is identical to the one returned from previous
shmat()
calls for that segment. Even if no processes are currently attached to the segment, as long as the segment
has been attached before, the same rule applies.
If the calling process is already attached to the shared memory segment,
shmat() fails and returns
SHM_FAILED regardless of what value is passed in shmaddr.
shmdt() detaches from the calling process’s data segment the shared memory segment located at the
address specified by shmaddr.
RETURN VALUE
shmat() returns the following values:
n Successful completion. n is the data segment start address of the attached shared memory seg-
ment.
SHM_FAILED
Failure. The shared memory segment is not attached. errno is set to indicate the error. The
symbol
SHM_FAILED is defined in the header <sys/shm.h>. No successful return from
shmat() will return the value SHM_FAILED.
shmdt() returns the following values:
0 Successful completion.
-1 Failure. errno is set to indicate the error.
ERRORS
If shmat() fails, errno is set to one of the following values.
[EACCES] Operation permission is denied to the calling process.
[EINVAL] shmid is not a valid shared memory identifier, (possibly because the shared memory
segment was already removed using shmctl(2) with IPC_RMID), or the calling pro-
cess is already attached to shmid.
[EINVAL] shmaddr is not zero and the machine does not permit nonzero values, or shmaddr is
not equal to the current attach location for the shared memory segment.
[ENOMEM] The available data space is not large enough to accommodate the shared memory seg-
ment.
[EMFILE] The number of shared memory segments attached to the calling process exceed the
system-imposed limit.
If shmdt() fails, errno is set to one of the following values.
HP-UX Release 11i: December 2000 1 Section 2329
___
___