Name
shmget - allocates a shared memory segment
Library
libc.lib
Synopsis
|
int
shmget (key_t key, size_t size, int flag);
|
Return values
Upon successful completion,
shmget
returns the positive integer identifier of a shared memory segment.
Otherwise, -1 is returned and
errno
set to indicate the error.
Detailed description
Based on the values of
key
and
flag,
shmget
returns the identifier of a newly created or previously existing shared
memory segment.
The key
is analogous to a filename: it provides a handle that names an
IPC object.
There are three ways to specify a key:
- IPC_PRIVATE may be specified, in which case a new IPC object
will be created.
- An integer constant may be specified.
If no IPC object corresponding
to
key
is specified and the IPC_CREAT bit is set in
flag,
a new one will be created.
- The
ftok
may be used to generate a key from a pathname.
The mode of a newly created IPC object is determined by
OR Ns’ing
the following constants into the
flag
argument:
SHM_R
|
Read access for user.
|
SHM_W
|
Write access for user.
|
( SHM_R>>3)
|
|
Read access for group.
|
( SHM_W>>3)
|
|
Write access for group.
|
( SHM_R>>6)
|
|
Read access for other.
|
( SHM_W>>6)
|
|
Write access for other.
|
When creating a new shared memory segment,
size
indicates the desired size of the new segment in bytes.
The size
of the segment may be rounded up to a multiple convenient to the
kernel (i.e., the page size).
Examples
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#define SHM_SEG_SIZE 1024
int main(void)
{
int shm_id;
int perm;
/*
* Create a shared memory segment
*/
perm = SHM_R | SHM_W;
if ((shm_id = shmget(IPC_PRIVATE, SHM_SEG_SIZE,
IPC_CREAT | IPC_EXCL | perm))
== -1) {
printf("Shared memory create failed with errno %d\n", errno);
return -1;
}
return 0;
}
Errors
The
shmget
system call
will fail if:
[EINVAL]
|
|
Size specified is greater than the size of the previously existing segment.
Size specified is less than the system imposed minimum (1 byte), or greater than
the system imposed maximum (512kb).
|
[ENOENT]
|
|
No shared memory segment was found matching
key,
and IPC_CREAT was not specified.
|
[ENOSPC]
|
|
A shared memory identifier is to be created but the system-imposed
limit on the maximum number of allowed shared memory identifiers
(256) system-wide would be exceeded.
|
[ENOMEM]
|
|
The kernel was unable to allocate enough memory to
satisfy the request.
|
[EEXIST]
|
|
IPC_CREAT and IPC_EXCL were specified, and a shared memory segment
corresponding to
key
already exists.
|
See also
shmat,
shmctl,
shmdt,
ftok
Feedback
For additional information or queries on this page send feedback
© 2005-2007 Nokia
|
|