|
|||||||
|
|
SHMOPSection: Systemaufrufe (2)Updated: 28. November 1993 Index Return to Main Contents BEZEICHNUNGshmop - Gemeinsame SpeicheroperationenÜBERSICHT# include <sys/types.h> # include <sys/ipc.h> # include <sys/shm.h> char*shmat(intshmid, char*shmaddr, intshmflg) BESCHREIBUNGDie Funktion shmat hängt das durch shmid erkannte gemeinsame Speichersegment an das Datensegment des aufrufenden Prozesses an. Die Adresse des Anhangs wird durch shmaddr nach einem der folgenden Kriterien bestimmt:
Ist SHM_RDONLY in shmflg, gesetzt, wird das Segment für Lesezugriffe angehängt und der Prozeß muß die Berechtigung für Lesezugriffe auf das Segment besitzen. Alternativ wird das Segment für Lese- und Schreibzugriffe angehängt und der Prozeß muß die Berechtigung für Lese- und Schreibzugriffe auf das Segment besitzen. Es besteht kein sinnvoller Anwendungsbedarf für Speichersegmente mit gemeinsamem Zugriff mit ausschließlicher Schreibberechtigung. Der brk -Wert des aufrufenden Prozesses wird durch das Anhängen nicht verändert. Das Segment wird bei Beenden des Prozesses automatisch entfernt. Ein und dasselbe Segment kann mit Lese- bzw. Lese- und Schreibzugriff einmal oder mehrfach an den Adressraum des Prozesses angehängt werden. Nach einem erfolgreichen shmat -Aufruf, aktualisiert das System die Bestandteile der dem Speichersegment zugeordneten Struktur shmid_ds wie folgt:
Beachten Sie, daß das Anhängen auch erfolgreich verlaufen kann, wenn das gemeinsame Speichersegment als "zu löschen" markiert ist. Die Funktion shmdt entfernt das gemeinsame Speichersegment aus dem Datensegment des aufrufenden Prozesses, in welchem dieses sich an der durch shmaddr angegebenen Adresse befindet. Das zu entfernende gemeinsame Speichersegment muß eines der momentan (am Adressraum des Prozesses) angehängten sein, wobei shmaddr dem Rückgabewert des anhängenden shat -Aufrufs entspricht. Nach einem erfolgreichen shmdt -Aufruf, aktualisiert das System die Bestandteile der dem Speichersegment zugeordneten Struktur shmid_ds wie folgt:
Der eingenommene Bereich im Benutzerspeicherbereich des aufrufenden Prozesses wird freigegeben. SYSTEM CALLS
RÜCKGABEWERTNach einem Fehler geben beide Funktionen -1 in errno zurück und weisen so auf den Fehler hin. Andernfalls gibt shmat die Adresse des angehängten Speichersegments und shmdt gibt 0 zurück.FEHLERWenn shmat fehlschlägt, ist errno nach dem Rücksprung mit einem der folgenden Werte belegt:
Die Funktion shmdt schlägt nur fehl, wenn an der Adresse shmaddr kein gemeinsames Speichersegment angehängt ist. In diesem Fall wird errno bei der Rückgabe auf EINVAL gesetzt. ANMERKUNGENBei Ausführung eines fork(2) -Systemaufrufs, erbt der Kind-Prozeß alle angehängten gemeinsamen Speichersegmente.Das gemeinsame Speichersegment eines Prozesses der einen execve(2) -Systemaufruf ausführt wird nicht an den daraus entstandenen Prozeß angehängt. Der folgende Systemparameter beeinflußt einen shmat -Systemaufruf:
Die Umsetzung hat keinen inneren Einschränkungen der maximalen Anzahl von Speichersegmenten pro Prozeß (SHMSEG) KONFORM ZUSVr4, SVID. Unter SVr4 ist eine weitere Fehlerbedingung EMFILE dokumentiert.SIEHE AUCHipc(5), shmctl(2), shmget(2).
Index
| ||||||
|
|
|
Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account Document on this page is part of "Linuxinfor Man Pages in HTML Format: man2". See Index Page for more info about Authorship and Copyright. 1999-2008 Linuxinfor.com. No rights reserved. |