Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

shmctl, shmctl64 - gemeinsam nutzbaren Speicherbereich steuern

&pagelevel(4)&pagelevel

Definition

#include <sys/shm.h>

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

CRTE111A30

int shmctl64(int shmid, int cmd, struct shmid_ds64 *buf); (Ende)

Beschreibung

shmctl() bietet eine Vielzahl von Steuerungsoperationen für gemeinsam nutzbare Speicherbereiche („shared memory“), die mit cmd angegeben werden.

Die Funktion shmctl64() verhält sich wie die Funktion shmctl(), außer dass sie eine shmid_ds64 Datenstruktur anstelle einer shmid_ds Datenstruktur verwendet und daher auch über den 19.1.2038 03:14:07 Uhr UTC hinaus korrekt funktioniert.

Die Struktur shmid_ds enthält die folgenden Elemente:

struct ipc_perm shm_perm;       /* operation permission struct */
int             shm_segsz;      /* size of segment in bytes */
ulong_t        *shm_shmat;      /* hidden */
ushort_t        shm_dummy;      /* shm_lkcnt - no longer used! */
pid_t           shm_lpid;       /* pid of last shmop */
pid_t           shm_cpid;       /* pid of creator */
ulong_t         shm_nattch;     /* used only for shminfo */
ulong_t         shm_cnattch;    /* used only for shminfo */
time_t          shm_atime;      /* last shmat time */
time_t          shm_dtime;      /* last shmdt time */
time_t          shm_ctime;      /* last change time */

Die Elemente der Struktur shmid_ds64 sind wie die von shmid_ds definiert, mit Ausnahme folgender Komponenten:

time64_t        shm_atime;
time64_t        shm_dtime;
time64_t        shm_ctime;

Die folgenden Werte für cmd sind verfügbar:

IPC_STAT

Aktuelle Werte aller Komponenten der shmid zugeordneten Datenstruktur shmid_ds bzw. shmid_ds64 in die Struktur eintragen, auf die buf zeigt. Der Aufbau der Struktur wird in sys/shm.h definiert.

IPC_SET

Die Werte folgender Komponenten der shmid zugeordneten Datenstruktur shmid_ds bzw. shmid_ds64 auf die entsprechenden Werte aus der Struktur setzen, auf die buf zeigt:

shm_perm.uid
shm_perm.gid
shm_perm.mode    /* nur 9 niederwertige Bits */

IPC_SET kann nur von einem Prozess ausgeführt werden, dessen effektive Benutzernummer gleich der eines Prozesses mit Sonderrechten oder gleich dem Wert von shm_perm.cuid bzw. shm_perm.uid in der shmid zugeordneten Datenstruktur shmid_ds ist.

IPC_RMID

Die mit shmid angegebene shared-memory-Speicherkennzahl im System sowie das dazugehörige Speichersegment und die dazugehörige Datenstruktur shmid_ds  bzw. shmid_ds64 löschen. IPC_RMID kann nur von einem Prozess ausgeführt werden, dessen effektive Benutzernummer gleich der eines Prozesses mit besonderen Rechten oder gleich dem Wert von shm_perm.cuid bzw. shm_perm.uid in der shmid zugeordneten Datenstruktur shmid_ds bzw. shmid_ds64 ist.

Returnwert

0

bei Erfolg.


-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

shmctl() und shmctl64() schlagen fehl, wenn gilt 

 

EACCES

cmd ist gleich IPC_STAT und der aufrufende Prozess hat kein Leserecht.

 

Erweiterung

 

EFAULT

msgp verweist auf eine unzulässige Adresse. (Ende)

 

EINVAL

Der Wert von shmid ist keine gültige Kennzahl für gemeinsam nutzbare Speicherbereiche,
oder der Wert von cmd ist kein gültiges Kommando,
oder cmd ist IPC_SET und shm_perm.uid oder shm_perm.gid sind ungültig.

 

Erweiterung

 

ENOMEM

Es steht nicht genügend Speicher zur Verfügung. (Ende)

 

EPERM

ist gleich IPC_RMID oder IPC_SET, die effektive Benutzernummer des aufrufenden Prozesses ist nicht die eines Prozesses mit Sonderrechten und stimmt nicht mit shm_perm.cuid oder shm_perm.uid in der shmid zugeordneten Datenstruktur überein.


shmctl() schlägt fehl, wenn gilt:

Erweiterung

 

EOVERFLOW

Ein Zeitstempel ist zu groß für eine time-t Komponente (dies wird nach dem 19.1.2038 03:14:07 Uhr UTC der Fall sein)(Ende)


shmctl 64() schlägt fehl, wenn gilt:

 

EINVAL

POSIX-BC Korrekturstand < A47.

Siehe auch

auch shmat(), shmdt(), shmget(), sys/shm.h, Abschnitt  "Interprozesskommunikation“.