Computer Science
SHMOP(2) Linux Programmer's Manual SHMOP(2)
NAME
shmop - shared memory operations
SYNOPSIS
# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/shm.h>
char *shmat ( int shmid, char *shmaddr, int shmflg )
int shmdt ( char *shmaddr)
DESCRIPTION
The function shmat attaches the shared memory segment
identified by shmid to the data segment of the calling
process. The attaching address is specified by shmaddr
with one of the following criteria:
If shmaddr is 0, the system tries to find an
unmapped region in the range 1 - 1.5G starting from
the upper value and coming down from there.
If shmaddr isn't 0 and SHM_RND is asserted in shm-
flg, the attach occurs at address equal to the
rounding down of shmaddr to a multiple of SHMLBA.
Otherwise shmaddr must be a page aligned address at
which the attach occurs.
If SHM_RDONLY is asserted in shmflg, the segment is
attached for reading and the process must have read access
permissions to the segment. Otherwise the segment is
attached for read and write and the process must have read
and write access permissions to the segment. There is no
notion of write-only shared memory segment.
The brk value of the calling process is not altered by the
attach. The segment will automatically detached at pro-
cess exit. The same segment may be attached as a read and
as a read-write one, and more than once, in the process's
address space.
On a successful shmat call the system updates the members
of the structure shmid_ds associated to the shared memory
segment as follows:
shm_atime is set to the current time.
shm_lpid is set to the process-ID of the calling
process.
shm_nattch is incremented by one.
Note that the attach succeeds also if the shared memory
segment is marked as to be deleted.
The function shmdt detaches from the calling process's
data segment the shared memory segment located at the
address specified by shmaddr. The detaching shared memory
segment must be one among the currently attached ones (to
the process's address space) with shmaddr equal to the
value returned by the its attaching shat call.
On a successful shmdt call the system updates the members
of the structure shmid_ds associated to the shared memory
segment as follows:
shm_dtime is set to the current time.
shm_lpid is set to the process-ID of the calling
process.
shm_nattch is decremented by one. If it becomes 0
and the segment is marked for deletion, the segment
is deleted.
The occupied region in the user space of the calling pro-
cess is unmapped.
SYSTEM CALLS
fork() After a fork() the child inherits the attached
shared memory segments.
exec() After an exec() all attached shared memory segments
are detached (not destroyed).
exit() Upon exit() all attached shared memory segments are
detached (not destroyed).
RETURN VALUE
On a failure both functions return -1 with errno indicat-
ing the error, otherwise shmat returns the address of the
attached shared memory segment, and shmdt returns 0.
ERRORS
When shmat fails, at return errno will be set to one among
the following values:
EACCES The calling process has no access permissions
for the requested attach type.
EINVAL Invalid shmid value, unaligned (i.e., not page-
aligned and SHM_RND was not specified) or
invalid shmaddr value, or failing attach at
brk.
ENOMEM Could not allocate memory for the descriptor or
for the page tables.
The function shmdt can fails only if there is no shared
memory segment attached at shmaddr, in such a case at
return errno will be set to EINVAL.
NOTES
On executing a fork(2) system call, the child inherits all
the attached shared memory segments.
The shared memory segments attached to a process executing
an execve(2) system call will not be attached to the
resulting process.
The following is a system parameter affecting a shmat sys-
tem call:
SHMLBA Segment low boundary address multiple. Must be
page aligned. For the current implementation
the SHMBLA value is PAGE_SIZE.
The implementation has no intrinsic limit to the per pro-
cess maximum number of shared memory segments (SHMSEG)
CONFORMING TO
SVr4, SVID. SVr4 documents an additional error condition
EMFILE.
SEE ALSO
ipc(5), shmctl(2), shmget(2).
Linux 0.99.13 November 28, 1993 1
Back to the index