#include <sys/shm.h> #include <sys/stat.h> int shmget(key_t key, size_t size, int shmflg);
The shmget() function either creates a new shared memory segment or returns the shared memory identifier associated with the key parameter for an existing shared memory segment. A new shared memory segment is created if one of the following is true:
The system maintains status information about a shared memory segment which can be retrieved with the shmctl() function. When a new shared memory segment is created, the system initializes the members of the shmid_ds structure as follows:
There are two types of shared memory segments: teraspace shared memory segments and nonteraspace shared memory segments. A teraspace shared memory segment is accessed by adding the shared memory segment to a job's teraspace. A nonteraspace shared memory segment creates shared memory using i5/OS space objects.
Shared memory segments larger than 16 773 120 bytes (16 MB minus 4096 bytes) should be created as teraspace shared memory segments. The maximum size of a teraspace shared memory segment is 4 294 967 295 bytes (4GB - 1). The maximum size of a resizeable teraspace shared memory segment is 268 435 456 bytes (256 MB).
The maximum size of a nonteraspace shared memory segments is 16 776 960 bytes (16 MB - 256 bytes). When the operating system accesses a nonteraspace shared memory segment that has a size in the range 16 773 120 bytes (16 MB minus 4096 bytes) to 16 776 960 bytes (16 MB minus 256 bytes), a performance degradation will be observed.
The size of the shared memory segment can be changed after it is created using the shmctl() function. The size can only be changed if it is nonteraspace shared memory segment or if it is a teraspace shared memory segment and SHM_RESIZE_NP is specified in the shmflg parameter.
If accessing an existing shared memory segment, only specify this constant if it was specified when the shared memory segment was created.
If accessing an existing shared memory segment, only specify this constant if it was specified when the shared memory segment was created.
Authorization Required for shmget()
Object Referred to | Authority Required | errno |
---|---|---|
Shared memory segment to be created | None | None |
Existing shared memory segment to be accessed | See Note | EACCES |
Note: If the thread is accessing a shared memory segment that already exists, the mode specified in the last 9 bits of the shmflg parameter must be a subset of the mode of the existing shared memory segment.
value | shmget()was successful. The value returned is the shared memory identifier associated with the key parameter. |
-1 | shmget() was not successful. The errno variable is set to indicate the error. |
If shmget() is not successful, errno usually indicates one of the following errors. Under some conditions, errno could indicate an error other than those listed here.
Permission denied.
An attempt was made to access an object in a way forbidden by its object access permissions.
The thread does not have access to the specified file, directory, component, or path.
A shared memory identifier exists for the parameter key, but permissions specified in the low-order 9 bits of semflg are not a subset of the current permissions.
Shared memory operations are not permitted because the QSHRMEMCTL system value is set to 0.
A damaged object was encountered.
The shared memory segment has been damaged by a previous shared memory operation.
File exists.
The file specified already exists and the specified operation requires that it not exist.
The named file, directory, or path already exists.
A shared memory identifier exists for the key parameter and both the IPC_CREAT and IPC_EXCL flags are set in the shmflg parameter.
The value specified for the argument is not correct.
A function was passed incorrect argument values, or an operation was attempted on an object and the operation specified is not supported for that type of object.
An argument value is not valid, out of range, or NULL.
One of the following has occurred:
No such path or directory.
The directory or a component of the path name specified does not exist.
A named file or directory does not exist or is an empty string.
A shared memory identifier does not exist for the key parameter and the IPC_CREAT flag is not set in the shmflg parameter.
Storage allocation request failed.
A function needed to allocate storage, but no storage is available.
A new shared memory segment is being created and the amount of available physical memory is not sufficient to fulfill the request.
No space available.
The requested operations required additional space on the device and there is no space left. This could also be caused by exceeding the user profile storage limit when creating or transferring ownership of an object.
Insufficient space remains to hold the intended file, directory, or link.
A shared memory identifier cannot be created because the system limit on the maximum number of allowed shared memory identifiers would be exceeded.
Unknown system state.
The operation failed because of an unknown system state. See any messages in the job log and correct any errors that are indicated, then retry the operation.
None.
See Code disclaimer information for information pertaining to code examples.
For an example of using this function, see Using Semaphores and Shared Memory in Examples: APIs.
Top | UNIX-Type APIs | APIs by category |