Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

shmat - gemeinsam nutzbaren Speicherbereich anhängen

&pagelevel(4)&pagelevel

Definition

#include <sys/shm.h>

void *shmat(int shmid, const void*shmaddr, int shmflg);

Beschreibung

shmat() hängt das mit der Kennzahl für gemeinsam nutzbaren Speicherbereich shmid bezeichnete, gemeinsam benutzte Speichersegment an das Datensegment des aufrufenden Prozesses an. An welcher Stelle das Segment angehängt wird, richtet sich nach folgenden Kriterien:

  • Wenn shmaddr gleich 0 ist, wird das Segment an der ersten vom System festgestellten freien Adresse angehängt.

  • Wenn shmaddr und (shmflg & SHM_RND) ungleich 0 sind, wird das Segment an der mit (shmaddr-((ptrdiff_t) shmaddr % SHMLBA)) angegebenen Adresse angehängt. (Das Zeichen % ist der Modulo-Operator der Sprache C.)

  • Wenn shmaddr ungleich 0 und (shmflg & SHM_RND) gleich 0 sind, wird das Segment an der mit shmaddr angegebenen Adresse angehängt.

  • Wenn (shmflg & SHM_RDONLY) ungleich 0 ist und der aufrufende Prozess das Leserecht hat, wird das Segment zum Lesen angehängt.

  • Wenn (shmflg & SHM_RDONLY) gleich 0 ist und der aufrufende Prozess Schreib- und Leserecht hat, wird das Segment zum Lesen und Schreiben angehängt.

Folgende symbolische Namen sind in der Include-Datei sys/shm.h definiert:

Name

Beschreibung

SHMLBA

Vielfaches der Adresse der Segmentuntergrenze

SHM_RDONLY

Anfügen nur zum Lesen

SHM_RND

Anhängeadresse aufrunden

Returnwert

Startadresse des Datensegments für den gemeinsam nutzbaren Speicherbereich



bei Erfolg. Der Wert von shm_nattach wird in der Datenstruktur inkrementiert, die mit der Kennzahl für den gemeinsam nutzbaren Speicherbereich verbunden ist.

 

-1

bei Fehler. Das gemeinsame Speichersegment wird nicht angehängt. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

shmat() schlägt fehl, wenn gilt: 

 

EACCES

Dem aufrufenden Prozess werden die für die Operation benötigten Zugriffsrechte verweigert.

 

EINVAL

Der Wert von shmid ist keine gültige Kennzahl für gemeinsam nutzbaren Speicherbereich,
oder der Wert von shmaddr ist ungleich 0 und der Wert von (shmaddr - ((ptrdiff_t) shmaddr % SHMLBA)) ist eine unzulässige Adresse für das Anfügen von gemeinsam nutzbarem Speicher, oder der Wert von shmaddr ist ungleich 0, (shmflg & SHM_RND) ist gleich 0 und der Wert von shmaddr ist eine unzulässige Adresse für das Anfügen von gemeinsamem Speicher.

 

EMFILE

Die Anzahl der beim aufrufenden Prozess angehängten gemeinsamen Speichersegmente würde die systemspezifische Grenze überschreiten.

 

ENOMEM

Der verfügbare Datenspeicher ist nicht groß genug, um das gemeinsame Speichersegment unterzubringen.

Hinweise

Das Kommittee des IEEE 1003.4-Standards entwickelt gerade eine alternative Schnittstelle für die Interprozeßkommunikation. Anwendungsprogrammierer, die Interprozeßkommunikation einsetzen, sollten die Anwendungen so konzipieren, daß Module, die derzeit beschriebene Funktionen für Interprozeßkommunikation benutzen, einfach geändert werden können.

Siehe auch

exec, exit(), fork(), shmctl(), shmdt(), shmget(), sys/shm.h, Abschnitt "Interprozesskommunikation“.