Manual Pages for UNIX Darwin command on man shmctl
MyWebUniversity

Manual Pages for UNIX Darwin command on man shmctl

SHMCTL(2) BSD System Calls Manual SHMCTL(2)

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 in and 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 and

destroy 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 is

not the super-user,nor does the effective uid match

either the shmperm.uid or shmperm.cuid fields of the

data 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 the

super-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




Contact us      |      About us      |      Term of use      |       Copyright © 2000-2019 MyWebUniversity.com ™