NAME
sshhmmccttll - shared memory control operations
SYNOPSIS
##iinncclluuddee <
int sshhmmccttll(int shmid, int cmd, struct shmidds *buf);> DESCRIPTION
The sshhmmccttll() system call performs some control operations on the shared memory area specified by shmid. Each shared memory segment has a data structure associated with it, parts of which may be altered by sshhmmccttll() and parts of which determine the actions of sshhmmccttll(). This structure is defined as follows in: struct shmidds { struct ipcperm shmperm; /* operation permissions */ int shmsegsz; /* size of segment in bytes */ pidt shmlpid; /* pid of last shm op */ pidt shmcpid; /* pid of creator */ short shmnattch; /* # of current attaches */
timet shmatime; /* last shmat() time*/ timet shmdtime; /* last shmdt() time */timet shmctime; /* last change by shmctl() */
void *shminternal; /* sysv stupidity */ }; The ipcperm structure used inside the shmidds structure is defined inand looks like this: struct ipcperm { uidt uid; /* Owner's user ID */ gidt gid; /* Owner's group ID */ uidt cuid; /* Creator's user ID */ gidt cgid; /* Creator's group ID */ modet mode; /* r/w permission (see chmod(2)) */ unsigned short seq; /* Reserved for internal use */ keyt key; /* Reserved for internal use */ }; The operation to be performed by sshhmmccttll() is specified in cmd and is one of: IPCSTAT Gather information about the shared memory segment and place it in the structure pointed to by buf. IPCSET Set the value of the shmperm.uid, shmperm.gid and shmperm.mode fields in the structure associated with shmid. The values are taken from the corresponding fields in the structure pointed to by buf. This operation can only be exe-
cuted by the super-user, or a process that has an effective
user id equal to either shmperm.cuid or shmperm.uid in the data structure associated with the shared memory segment. IPCRMID Remove the shared memory segment specified by shmid anddestroy the data associated with it. Only the super-user or a
process with an effective uid equal to the shmperm.cuid or shmperm.uid values in the data structure associated with the queue can do this.The read and write permissions on a shared memory identifier are deter-
mined by the shmperm.mode field in the same way as is done with files (see chmod(2) ), but the effective uid can match either the shmperm.cuid field or the shmperm.uid field, and the effective gid can match either shmperm.cgid or shmperm.gid.RETURN VALUES
Upon successful completion, a value of 0 is returned. Otherwise, -1 is
returned and the global variable errno is set to indicate the error. EERRRROORRSS sshhmmccttll() will fail if: [EACCES] The command is IPCSTAT and the caller has no read permission for this shared memory segment. [EFAULT] buf specifies an invalid address. [EINVAL] shmid is not a valid shared memory segment identifier. cmd is not a valid command. [EPERM] cmd is equal to IPCSET or IPCRMID and the caller isnot the super-user,nor does the effective uid match
either the shmperm.uid or shmperm.cuid fields of thedata structure associated with the shared memory seg-
ment. An attempt is made to increase the value of shmqbytes through IPCSET but the caller is not thesuper-user.
LEGACY SYNOPSIS
##iinncclluuddee <
> ##iinncclluuddee <
> ##iinncclluuddee <
All of these include files are necessary.> LEGACY DESCRIPTION
The ipcperm structure used inside the shmidds structure, as defined in, looks like this: struct ipcperm { uint16t cuid; /* Creator's user id */ uint16t cgid; /* Creator's group id */ uint16t uid; /* Owner's user id */ uint16t gid; /* Owner's group id */ modet mode; /* r/w permission (see chmod(2)) */ uint16t seq; /* Reserved for internal use */ keyt key; /* Reserved for internal use */ }; This structure is maintained for binary backward compatibility with pre-
vious versions of the interface. New code should not use this interface, because ID values may be truncated.Specifically, LEGACY mode limits the allowable uid/gid ranges to 0-32767.
If the user has a UID that is out of this range (e.g., "nobody"), soft-
ware using the LEGACY API will not behave as expected.SEE ALSO
shmat(2), shmdt(2), shmget(2), compat(5) BSD August 17, 1995 BSD