Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ shmop(2) — SunOS 4.0.2

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

execve(2)

exit(2)

fork(2)

intro(2)

shmctl(2)

shmget(2)

SHMOP(2)  —  SYSTEM CALLS

NAME

shmop, shmat, shmdt − shared memory operations

SYNOPSIS

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

char ∗shmat(shmid, shmaddr, shmflg)
int shmid;
char ∗shmaddr;
int shmflg;

int shmdt(shmaddr)
char ∗shmaddr;

DESCRIPTION

shmat() maps the shared memory segment associated with the shared memory identifier specified by shmid into the data segment of the calling process.  Upon successful completion, the address of the mapped segment is returned. 

The shared memory segment is mapped at the address specified by one of the following criteria:

• If shmaddr is equal to zero, the segment is mapped at an address selected by the system.  Ordinarily, applications should invoke shmat() with shmaddr equal to zero so that the operating system may make the best use of available resources. 

• If shmaddr is not equal to zero and (shmflg & SHM_RND) is “true”, the segment is mapped at the address given by (shmaddr - (shmaddr modulus SHMLBA)). 

• If shmaddr is not equal to zero and (shmflg & SHM_RND) is “false”, the segment is mapped at the address given by shmaddr.

The segment is mapped for reading if (shmflg & SHM_RDONLY) is “true” ­{READ}, otherwise it is mapped for reading and writing ­{READ/WRITE}. 

shmdt() unmaps from the calling process’s address space the shared memory segment that is mapped at the address specified by shmaddr. The shared memory segment must have been mapped with a prior shmat() function call.  The segment and contents are retained until explicitly removed by means of the IPC_RMID function (see shmctl(2)). 

RETURN VALUES

Upon successful completion, the return values are as follows:

• shmat() returns the data segment start address of the mapped shared memory segment. 

• shmdt() returns a value of 0. 

Otherwise, a value of −1 is returned and errno is set to indicate the error. 

ERRORS

shmat() will fail and not map the shared memory segment if one or more of the following are true:

EINVAL shmid is not a valid shared memory identifier. 

EACCES Operation permission is denied to the calling process (see intro(2)). 

ENOMEM The available data space is not large enough to accommodate the shared memory segment. 

EINVAL shmaddr is not equal to zero, and the value of (shmaddr - (shmaddr modulus SHMLBA)) is an illegal address. 

EINVAL shmaddr is not equal to zero, (shmflg & SHM_RND) is “false”, and the value of shmaddr is an illegal address. 

EMFILE The number of shared memory segments mapped to the calling process would exceed the system-imposed limit. 

shmdt() will fail and not unmap the shared memory segment if:

EINVAL
shmaddr is not the data segment start address of a shared memory segment. 

SEE ALSO

execve(2), exit(2), fork(2), intro(2), shmctl(2), shmget(2)

Sun Release 4.0  —  Last change: 21 November 1987

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