shmget(S) 6 January 1993 shmget(S) Name shmget - get shared memory segment identifier Syntax cc . . . -lc #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> int shmget (key, size, shmflg) key_t key; int size, shmflg; Description The shmget system call returns the shared memory identifier associated with key. A shared memory identifier and associated data structure and shared mem- ory segment of at least size bytes are created for key if one of the fol- lowing is true: + key is equal to IPCPRIVATE. + key does not already have a shared memory identifier associated with it, and (shmflg & IPCCREAT) is ``true''. Upon creation, the data structure associated with the new shared memory identifier is initialized as follows: + shmperm.cuid, shmperm.uid, shmperm.cgid, and shmperm.gid are set equal to the effective user ID and effective group ID, respectively, of the calling process. + The low-order 9 bits of shmperm.mode are set equal to the low-order 9 bits of shmflg. shmsegsz is set equal to the value of size. + shmlpid, shmnattch, shmatime, and shmdtime are set equal to 0. + shmctime is set equal to the current time. Return value Upon successful completion, a non-negative integer, namely a shared mem- ory identifier is returned. Otherwise, a value of -1 is returned, and errno is set to indicate the error. Diagnostics The shmget system call fails if one or more of the following is true: [EACCES] A shared memory identifier exists for key, but operation per- mission (see Intro(S)) as specified by the low-order 9 bits of shmflg would not be granted. [EEXIST] A shared memory identifier exists for key but (shmflg & IPCCREAT) and (shmflg & IPCEXCL) are ``true''. [EINVAL] size is less than the system-imposed minimum or greater than the system-imposed maximum. [EINVAL] A shared memory identifier exists for key, but the size of the segment associated with it is less than size, and size is not equal to zero. [ENOENT] A shared memory identifier does not exist for key, and (shmflg & IPCCREAT) is ``false''. [ENOMEM] A shared memory identifier and associated shared memory seg- ment are to be created, but the amount of available memory is not sufficient to fill the request. [ENOSPC] A shared memory identifier is to be created, but the system- imposed limit on the maximum number of allowed shared memory identifiers system wide would be exceeded. [ENOSYS] The functionality is not supported on this implementation. Notes The user must explicitly remove shared memory segments after the last reference to them has been removed. See also shmctl(S), shmop(S) Standards conformance shmget is conformant with: AT&T SVID Issue 2; and X/Open Portability Guide, Issue 3, 1989.