Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

exit(2)

fork(2)

shmctl(2)

shmdt(2)

shmget(2)

shmid_ds(4)

shmat(2)  —  System Calls

OSF

NAME

shmat −  Attaches a shared memory region

SYNOPSIS

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
char ∗shmat(
int shmid,
caddr_t ∗addr,
int flags);

PARAMETERS

shmidSpecifies the ID for the shared memory region.  The ID is typically returned by a previous shmget() function. 

addrSpecifies the virtual address at which the process wants to attach the shared memory region.  The process can also specify 0 (zero) to have the kernel select an appropriate address. 

flagsSpecifies the attach flags.  Possible values are:

SHM_RNDIf the addr parameter is not 0 (zero), the kernel rounds off the address, if necessary. 

SHM_RDONLY
If the calling process has read permission, the kernel attaches the region for reading only.

DESCRIPTION

The shmat() function attaches the shared memory region identified by the shmid parameter to the virtual address space of the calling process.  For the addr parameter, the process can specify either an explicit address or 0 (zero), to have the kernel select the address.  If an explicit address is used, the process can set the SHM_RND flag to have the kernel round off the address, if necessary. 

Access to the shared memory region is determined by the operation permissions in the shm_perm.mode member in the region’s shmid_ds structure.  The low-order bits in shm_perm.mode are interpreted as follows:

00400Read by user

00200Write by user

00040Read by group

00020Write by group

00004Read by others

00002Write by others

The calling process is granted read and write permissions on the attached region if at least one of the following is true:

       •The effective user ID of the process is superuser. 

       •The effective user ID of the process is equal to shm_perm.cuid or shm_perm.uid and bit 0600  in shm_perm.mode is set. 

       •The effective group ID of the process is equal to shm_perm.cgid or shm_perm.gid and bit 0060  in shm_perm.mode is set. 

       •Bit 0006  in shm_perm.mode is set. 

If the process has read permission, it can attach the region as read only by setting the SHM_RDONLY flag. 

RETURN VALUES

Upon successful completion, the starting address for the attached region is returned. If the shmat() function fails, a value of -1 is returned and errno is set to indicate the error. 

ERRORS

If the shmat() function fails, the shared memory region is not attached and errno may be set to one of the following values:

[EACCES]The calling process does not have the appropriate privilege. 

[ENOMEM]There was not enough data space available to attach the shared memory region. 

[EINVAL]The shmid parameter does not specify a valid shared memory region ID; the addr parameter is not 0 (zero) and not a valid address; or the addr parameter is not 0 (zero) and not a valid address, and SHM_RND is not set. 

[EMFILE]An attempt to attach a shared memory region exceeded the maximum number of attached regions allowed for any one process. 

RELATED INFORMATION

Functions: exec(2), exit(2), fork(2), shmctl(2), shmdt(2), shmget(2)

Data structures: shmid_ds(4)

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026