|
Hopefully, this page is exactly what you are looking for, but if not, you can always find further assistance on Unix/Linux Forum!
System Calls shmop(2)
NAME
shmop, shmat, shmdt - shared memory operations
SYNOPSIS
#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);
int shmdt(char *shmaddr);
Standard conforming
int shmdt(const void *shmaddr);
DESCRIPTION
The shmat() function attaches the shared memory segment
associated with the shared memory identifier specified by
shmid to the data segment of the calling process.
The permission required for a shared memory control opera-
tion is given as {token}, where token is the type of permis-
sion needed. The types of permission are interpreted as fol-
lows:
00400 READ by user
00200 WRITE by user
00040 READ by group
00020 WRITE by group
00004 READ by others
00002 WRITE by others
See the Shared Memory Operation Permissions section of
intro(2) for more information.
When (shmflg&SHM_SHARE_MMU) is true, virtual memory
resources in addition to shared memory itself are shared
among processes that use the same shared memory.
When (shmflg&SHM_PAGEABLE) is true, virtual memory resources
are shared and the dynamic shared memory (DISM) framework is
created. The dynamic shared memory can be resized dynami-
cally within the specified size in shmget(2). The DISM
shared memory is pageable unless it is locked.
The shared memory segment is attached to the data segment of
the calling process at the address specified based on one of
the following criteria:
o If shmaddr is equal to (void *) 0, the segment is
attached to the first available address as selected by
the system.
SunOS 5.10 Last change: 1 Sep 2003 1
System Calls shmop(2)
o If shmaddr is equal to (void *) 0 and (
shmflg&SHM_SHARE_MMU) or (shmflg&SHM_PAGEABLE) is true,
then the segment is attached to the first available
suitably aligned address. When (shmflg&SHM_SHARE_MMU)
or (shmflg&SHM_PAGEABLE) is set, however, the permis-
sion given by shmget() determines whether the segment
is attached for reading or reading and writing.
o If shmaddr is not equal to (void *) 0 and
(shmflg&SHM_RND) is true, the segment is attached to
the address given by (shmaddr - (shmaddr modulus
SHMLBA)).
o If shmaddr is not equal to (void *) 0 and
(shmflg&SHM_RND) is false, the segment is attached to
the address given by shmaddr.
o The segment is attached for reading if
(shmflg&SHM_RDONLY) is true {READ}, otherwise it is
attached for reading and writing {READ/WRITE}.
The shmdt() function detaches from the calling process's
data segment the shared memory segment located at the
address specified by shmaddr. If the application is
standard-conforming (see standards(5)), the shmaddr argument
is of type const void *. Otherwise it is of type char *.
Shared memory segments must be explicitly removed after the
last reference to them has been removed.
RETURN VALUES
Upon successful completion, shmat() returns the data segment
start address of the attached shared memory segment; shmdt()
returns 0. Otherwise, -1 is returned, the shared memory seg-
ment is not attached, and errno is set to indicate the
error.
ERRORS
The shmat() function will fail if:
EACCES Operation permission is denied to the cal-
ling process (see intro(2)).
EINVAL The shmid argument is not a valid shared
memory identifier.
SunOS 5.10 Last change: 1 Sep 2003 2
System Calls shmop(2)
EINVAL The shmaddr argument is not equal to 0, and
the value of (shmaddr - (shmaddr modulus
SHMLBA)) is an illegal address.
EINVAL The shmaddr argument is not equal to 0, is
an illegal address, and (shmflg&SHM_RND) is
false.
EINVAL The shmaddr argument is not equal to 0, is
not properly aligned, and
(shmfg&SHM_SHARE_MMU) is true.
EINVAL SHM_SHARE_MMU is not supported in certain
architectures.
EINVAL Both (shmflg&SHM_SHARE_MMU) and
(shmflg&SHM_PAGEABLE) are true.
EINVAL (shmflg&SHM_SHARE_MMU) is true and the
shared memory segment specified by shmid()
had previously been attached by a call to
shmat() in which (shmflg&SHM_PAGEABLE) was
true.
(shmflg&SHM_PAGEABLE) is true and the shared
memory segment specified by shmid() had pre-
viously been attached by a call to shmat()
in which (shmflg&SHM_SHARE_MMU) was true.
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 seg-
ment.
SunOS 5.10 Last change: 1 Sep 2003 3
System Calls shmop(2)
The shmdt() function will fail if:
EINVAL The shmaddr argument is not the data segment
start address of a shared memory segment.
ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| Interface Stability | Standard |
|_____________________________|_____________________________|
| MT-Level | Async-Signal-Safe |
|_____________________________|_____________________________|
SEE ALSO
intro(2), exec(2), exit(2), fork(2), shmctl(2), shmget(2),
standards(5)
SunOS 5.10 Last change: 1 Sep 2003 4
Man(1) output converted with
man2html and wrapped by fishsponge
This page was generated on Wed Sep 12 11:27:09 GMT 2007
|
Your favourite pages:
No pages logged yet... Top 10 most popular pages:
prstat man page (24546 hits) (Solaris 10 11_06)
netcat man page (17695 hits) (Suse Linux 10.1)
ssh-socks5-proxy-connect man page (13530 hits) (Solaris 10 11_06)
signal man page (12550 hits) (Suse Linux 10.1)
startproc man page (11991 hits) (Suse Linux 10.1)
raidctl man page (11357 hits) (Solaris 10 11_06)
adv_cap_autoneg man page (10285 hits) (Solaris 10 11_06)
sqlite3 man page (9729 hits) (openSUSE 10.2)
CPAN man page (8947 hits) (Suse Linux 10.1)
BusyBox man page (7702 hits) (Suse Linux 10.1)
|