struct ipc_perms { uint32_t __key; uint32_t uid; uint32_t gid; uint32_t cuid; uint32_t cgid; uint32_t mode; uint32_t __seq; uint64_t reserved[2]; } struct shmid_ds { struct ipc_perms shm_perm; uint64_t shm_segsz; uint64_t shm_atime; uint64_t shm_dtime; uint64_t shm_ctime; uint32_t shm_cpid; uint32_t shm_lpid; uint64_t shm_nattch; } #define IPC_RMID 0 #define IPC_SET 1 #define IPC_STAT 2 int shmctl(int shmid, int cmd, struct shmid_ds *buf);
This syscall performs the control operation specified by cmd on the
shared memory segment whose identifier is given in shmid.
cmd can be one of:
IPC_RMIDThe passed shmid is set to be deleted when the attached count of the
segment goes to 0. Otherwise, it will linger forever. buf is
ignored.
IPC_SETInformation passed on the structure pointed to by buf is used to modify
the permission fields of the passed segment, namely shm_perm.uid,
shm_perm.gid, and shm_perm.mode.
IPC_STATGet the associated information of the passed segment id and write it to the
structure pointed to by buf.
The syscall returns 0 on success or -1 on failure, with the
following errno:
EINVALsize is less than needed and/or fd is not a TTY.
EBADFfd is not opened to anything.
EFAULTbuffer points to invalid memory.