shmctl [ MPE/iX Developer's Kit Reference Manual Volume II ] MPE/iX 5.0 Documentation
MPE/iX Developer's Kit Reference Manual Volume II
shmctl
Performs control operations on a shared memory area.
Syntax
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl (int shmid, int cmd, struct shmid_ds *buffer);
Parameters
shmid Passes a shared memory identifier returned by a call to
shmget().
cmd Passes a command defining the control operation to perform.
Valid control codes are defined in the "Description" section
below.
buffer Passes a pointer to a buffer of type struct shmid_ds (defined
in the <sys/shm.h> header). Operations on the buffer are
defined by cmd. Refer to the "Description" section below.
Return Values
0 Success.
-1 An error occurred, and errno is set to indicate the error
condition.
Description
The shmctl() function performs control operations on shmid and its
associated shared memory area and data structure. Control operations are
defined by the cmd parameter. Following are valid commands to be passed
in cmd:
IPC_RMID Deallocate the shared memory identifier specified by shmid and
purge the shared memory area and data structure associated
with it. If the shared memory area is attached to one or more
processes the shared memory area key is changed to IPC_PRIVATE
and the area is marked removed. The area is purged only when
the last attached process detaches from it.
The calling process must have either [REV BEG]MPE/iX SM
capability[REV END] or be the owner or creator of the shared
memory area (have an effective user ID equal to the value of
either the shm_perm.uid (owner) or shm_perm.cuid (creator)
fields in the data structure associated with shmid).
IPC_SET Copy data from the following fields of the shmid_ds structure
pointed to by buffer to the corresponding fields in the data
structure associated with shmid:
* shm_perm.uid (owner user ID)
* shm_perm.gid (owner group ID)
* Low order 9 bits of shm_perm.mode
The calling process must have either [REV BEG]MPE/iX SM
capability[REV END] or an effective user ID equal to the value
of either the shm_perm.uid or shm_perm.cuid fields in data
structure associated with shmid.
IPC_STAT Copy all data from the structure associated with shmid to the
data structure pointed to by buffer.
Implementation Considerations
The SHM_LOCK and SHM_UNLOCK options of cmd are not implemented. A call
to shmctl() with cmd set to [REV BEG]either SHM_LOCK or SHM_UNLOCK
results in an error.[REV END]
Errors
If an error occurs, errno is set to one of the following values.
EACCES CAUSE cmd is set to IPC_STAT and the calling process does
not have read permission.
ACTION Ensure that the calling process has read permission
to the shared memory area.
EFAULT CAUSE The system detected a NULL or bad address in
attempting to use the buffer argument.
ACTION Check to see if the pointer is properly initialized.
EINVAL CAUSE shmid is not a valid shared memory identifier, or cmd
is not a valid command, or cmd specifies SHM_UNLOCK
or SHM_LOCK.
ACTION Check that shmid is valid and that the identifier has
not been removed from the system, and check that cmd
specifies a valid, supported command.
ENOMEM CAUSE cmd specifies SHM_LOCK or the available data space is
not large enough to accommodate the shared memory
area.
ACTION None.
EPERM CAUSE cmd specifies IPC_RMID or IPC_SET and the calling
process does not have either [REV BEG]MPE/iX SM
capability[REV END] or an effective user ID equal to
the value of either the shm_perm.uid (owner) or
shm_perm.cuid (creator) fields in the data structure
associated with shmid.
ACTION Ensure that the calling process has the appropriate
effective user ID or the appropriate capabilities to
perform the specified cmd.
ESYSERR CAUSE An operating system error occurred that does not map
directly to any of the above errors.
ACTION Examine the MPE/iX process error stack for the type
of system error.
See Also
shmat(), shmdt(), shmget(), SVID2 (Section 12)
MPE/iX 5.0 Documentation