Go to the previous, next section.
int shmctl(int shmid, int cmd, struct shmid_ds
*buf);
shmid: [in] the memory segment to manipulate.
cmd: [in] the operation to perform.
buf: [in out] parameter for the operation (see description).
This calls manipulates some operational parameters of shared memory
segments. The shmid_ds
structure has the following layout:
struct shmid_ds { struct ipc_perm shm_perm; /* operation perms */ int shm_segsz; /* size of segment (bytes) */ time_t shm_atime; /* last attach time */ time_t shm_dtime; /* last detach time */ time_t shm_ctime; /* last change time */ unsigned short shm_cpid; /* pid of creator */ unsigned short shm_lpid; /* pid of last operator */ short shm_nattch; /* no. of current attaches */ /* the following are private */ unsigned short shm_npages; /* size of segment (pages) */ unsigned long *shm_pages; /* array of ptrs to frames -> SHMMAX */ struct shm_desc *attaches; /* descriptors for attaches */ };
cmd can take the following values:
IPC_STAT
shmid_ds
structure of the memory segment. The
calling taks must have read privileges on the segment.
IPC_SET
shmid_ds
structure of the memory segment. The calling
task must have alter privileges on the segment. Only the members
uid
, gid
and the lower 9 bits of mode
of
shm_perm
can be modified.
IPC_RMID
SHM_LOCK
SHM_UNLOCK
On success, the call returns zero. On error -1 is returned and
errno
is set to one of the following values:
EINVAL
: shmid or cmd are not valid.
EPERM
: the calling task does not have enough privileges on
the memory segment to perform the operation.
EFAULT
or EIDRM
.
Go to the previous, next section.