HPlogo MPE/iX Developer's Kit Reference Manual Volume 2: HP 3000 MPE/iX Computer Systems > Chapter 2 SVID IPC Library Function Descriptions

shmat

» 

Technical documentation

Complete book in PDF
» Feedback

 » Table of Contents

 » Index

Attaches the calling process to a shared memory area.

Syntax

   #include <sys/types.h>

   #include <sys/ipc.h>

   #include <sys/shm.h>



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

Parameters

shmid

Passes a shared memory identifier returned by a shmget() call.

shmaddr

Passes either 0 or a valid memory address. Set shmaddr to zero to attach a shared memory area to the address space of the calling process. Otherwise, set shmaddr to the data start address of a shared memory area that is already attached to another process.

shmflg

Passes a value specifying that the calling process has read/write access to the attached shared memory area. It is not possible to attach for write-only access or read-only access.

Return Values

addr

Success. shmat() returns the data area start address of the attached shared memory area.

-1

An error occurred, and errno is set to indicate the error condition.

Description

The shmat() function attaches the shared memory area associated with the shared memory identifier specified by shmid to the data area of the calling process.

If the shared memory area is already attached to another process, a non-zero value of shmaddr is accepted, provided the specified address is identical to the current attach address of the area. The area is attached for both reading and writing.

Implementation Considerations

The MPE/iX implementation of SVID IPC shared memory emulates the equivalent functionality on a Series 800 HP9000 computer system. A process cannot attach to the same shmid multiple times. The address must be the same in all processes. Specifying a different address results in an error.

When attaching to a shared memory area for the first time, shmaddr must be set to zero.

The SHM_RND and SHMLBA flags are not supported. Specifying SHM_RND results in an error, and errno is set to EACCES.

The maximum number of shared memory areas a process can attach to is 256.

When fork() is called, the child process inherits all shared memory areas to which the parent process is attached. When exec() is called, the shared memory attached to the calling process is not attached to the new process.

Errors

If an error occurs, errno is set to one of the following values.

EACCESCAUSE The calling process does not have permission, or SHM_RND was specified.
 ACTION Ensure that the calling process has permission to access the area as requested, or do not specify the SHM_RND and SHMLBA flags.
EINVALCAUSE shmid is not a valid shared memory identifier, or shmaddr is not zero and not equal to the current attach location for the shared memory area, or the calling process is already attached to the shared memory area.
 ACTION Check that shmid is valid and has not been removed from the system. If there is no current attach location for the shared memory area, make sure shmaddr is zero. A process cannot attach more than once (concurrently) to the same shared memory area.
EMFILECAUSE The number of shared memory areas attached to the calling process would exceed the system-defined limit.
 ACTION None. The operation can be retried if the process detaches from another shared memory area to which it is currently attached.
ENOMEMCAUSE The available data space is not large enough to accommodate the shared memory area.
 ACTION None. The operation can be retried later.
ESYSERRCAUSE An operating system error occurred that does not map directly to any of the above errors.
 ACTION Examine the MPE/iX process error stack for the type of system error.

See Also

shmctl(), shmdt(), shmget(), SVID2 (Section 12)

Feedback to webmaster