Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

semget - Semaphorkennzahl ermitteln

&pagelevel(4)&pagelevel

Definition

#include <sys/sem.h>

int semget(key_t key, int nsems, int semflg);

Beschreibung

semget() richtet eine Semaphorkennzahl mit der dazugehörigen Datenstruktur semid_ds und der dazugehörigen Menge von nsems Semaphoren (siehe sys/sem.h) für das Argument key ein, wenn eine der folgenden Bedingungen zutrifft:

  • key hat den Wert IPC_PRIVATE.

  • Für key wurde noch keine Semaphorkennzahl eingerichtet und (semflg & IPC_CREAT) ist ungleich 0.

Beim Einrichten der neuen Semaphorkennzahl key wird die dazugehörige Datenstruktur semid_ds wie folgt initialisiert:

  • Für die Strukturkomponenten sem_perm.cuid, sem_perm.uid, sem_perm.cgid und sem_perm.gid werden die effektive Benutzernummer und die effektive Gruppennummer des aufrufenden Prozesses eingetragen.

  • In die 9 niederwertigen Bits von sem_perm.mode werden die 9 niederwertigen Bits von semflg eingetragen.

  • sem_nsems gleich dem Wert von nsems gesetzt.

  • sem_otime wird gleich 0 und sem_ctime gleich der aktuellen Zeit gesetzt.

  • Die den einzelnen Semaphoren zugeordneten Datenstrukturen werden nicht initialisiert. setctl() kann mit den Kommandos SETVAL oder SETALL dazu verwendet werden, die einzelnen Semaphoren zu initialisieren.

Returnwert

Semaphorkennzahl



bei Erfolg. Die Semaphorkennzahl ist eine nichtnegative ganze Zahl.

 

-1

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

Fehler

semget() schlägt fehl, wenn gilt:

 

EACCES

Für key existiert bereits eine Semaphorkennzahl, aber die in den 9 niederwertigen Bits von semflg angegebene Berechtigung wurde nicht erteilt.

 

EEXIST

Für key existiert eine Semaphorkennzahl, aber
(( semflg & IPC_CREAT) && ( semflg & IPC_EXCL)) ist ungleich 0.

 

EINVAL

Der Wert von nsems ist entweder kleiner gleich 0 oder größer als der vom System festgelegte Maximalwert,
oder es existiert bereits eine Semaphorkennzahl key, deren zugehörige Semaphorenmenge weniger als nsems Semaphore enthält und nsems ist ungleich 0. 

 

ENOENT

Für key existiert keine Semaphorkennzahl und ( semflg & IPC_CREAT) ist gleich 0.

 

ENOSPC

Es soll eine Semaphorkennzahl eingerichtet werden; aber dadurch wird die Maximalzahl der Semaphoren überschritten, die im System zulässig sind.

Siehe auch

semctl(), semop(), sys/sem.h, Abschnitt "Interprozesskommunikation“.