Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ shmop(2) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

exit(2)

fork(2)

shmctl(2)

shmget(2)

preload(8)

shmop(2)                                                           shmop(2)

NAME
     shmop: shmat, shmdt - Operationen auf Shared Memory

SYNTAX
     #include <sys/shm.h>

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

     int shmdt(const void *shmaddr);

BESCHREIBUNG
     shmat() fügt das Shared-Memory-Segment (gemeinsam benutzte Speicher-
     segment), das zur Kennung shmid gehört, an das Datensegment des aufru-
     fenden Prozesses an. Das Segment wird mit der Adresse verbunden, die
     durch eine der folgenden Möglichkeiten angegeben wird:

     -  Wenn shmaddr gleich (void *) 0 ist, wird das Segment mit der ersten
        verfügbaren Adresse verbunden, die vom System ausgewählt wird.

     -  Wenn shmaddr ungleich (void *) 0 und (shmflg&SHMRND) wahr ist,
        wird das Segment mit der von
        (shmaddr - ((ptrdifft)shmaddr%SHMLBA)) angegebenen Adresse verbun-
        den.

     -  Wenn shmaddr ungleich (void *) 0 und (shmflg&SHMRND) unwahr ist,
        wird das Segment mit der von shmaddr angegebenen Adresse verbunden.

     shmdt() entfernt das durch die Adresse shmaddr angegebene Shared-
     Memory-Segment vom Datensegment des aufrufenden Prozesses.

     Das Segment wird zum Lesen angefügt, wenn (shmflg&SHMRDONLY) wahr ist
     andernfalls wird es zum Lesen und Schreiben angefügt

     shmat() ist erfolglos und macht das Shared-Memory-Segment nicht ver-
     fügbar, wenn einer oder mehrere der nachstehenden Punkte zutreffen:

     EINVAL    shmid ist keine gültige Shared-Memory-Kennung.

     EACCES    Die Zugriffserlaubnis wird dem aufrufenden Prozeß verwei-
               gert.

     ENOMEM    Der verfügbare Platz im Datensegment reicht für die Aufnahme
               des Shared-Memory-Segments nicht aus.

     EINVAL    shmaddr ist ungleich Null, und der Wert von
               (shmaddr - ((ptrdifft)shmaddr%SHMLBA)) ist eine unzulässige
               Adresse.

     EINVAL    shmaddr ist ungleich Null, (shmflg&SHMRND) ist unwahr und
               der Wert von shmaddr ist eine unzulässige Adresse.





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

shmop(2)                                                           shmop(2)

     EMFILE    Die Anzahl der Shared-Memory-Segmente, die dem aufrufenden
               Prozeß zugeteilt sind, würde den systembedingten Grenzwert
               überschreiten.

     EINVAL    shmdt() ist erfolglos und entfernt das Shared-Memory-Segment
               nicht, wenn shmaddr nicht die Datensegment-Startadresse
               eines Shared-Memory-Segments ist.

     EINVAL    Das ausgeführte Programm ist ein speziell vorabgeladenes
               Programm. Das Argument shmaddr liegt illegal zwischen den
               Text- und Daten-Bereichen.

ERGEBNIS
     Nach erfolgreicher Beendigung ist der Rückgabewert wie folgt:

     shmat()   gibt die Datensegment-Startadresse des angefügten Shared-
               Memory-Segmentes zurück.

     shmdt()   gibt 0 zurück.

     Andernfalls wird -1 zurückgegeben, und errno wird zur Anzeige auf den
     Fehlerwert gesetzt.

HINWEISE
     Der Benutzer muß Shared-Memory-Segmente ausdrücklich entfernen, nach-
     dem der letzte Verweis auf diese entfernt worden ist.

     Es kann in Zukunft Änderungen bei den Schnittstellen für Interprozeß-
     Kommunikation geben. Sie sollten daher Ihre Anwendungen so gestalten,
     daß in Modulen, die shmctl() verwenden, diese Funktion später leicht
     durch eine andere ersetzt werden kann.

SIEHE AUCH
     exec(2), exit(2), fork(2), shmctl(2), shmget(2), preload(8).




















Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

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