Provided by: manpages-pl-dev_20060617-1_all bug

NAZWA

       semget - pobranie identyfikatora zestawu semaforów

SKŁADNIA

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/sem.h>

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

OPIS

       Funkcja  ta  zwraca  identyfikator  zestawu  semaforów,  skojarzonego z
       parametrem key.  Jeśli key ma wartość IPC_PRIVATE lub, gdy z  wartością
       key  nie  jest  skojarzony  żaden  istniejący  zestaw  semaforów,  a  w
       parametrze semflg został przekazany znacznik IPC_CREAT (tzn.  semflg  &
       IPC_CREAT  jest  niezerowe),  to  tworzony  jest  nowy zestaw semaforów
       nsems.

       Znaczniki IPC_CREAT i IPC_EXCL przekazywane parametrem semflg pełnią tę
       samą  rolę  w obsłudze semaforów, co O_CREAT i O_EXCL w parametrze mode
       funkcji systemowej open(2): np. funkcja semget  zgłosi  błąd,  jeśli  w
       semflg  przekazane  zostaną  obydwa znaczniki IPC_CREAT i IPC_EXCL, zaś
       zestaw semaforów identyfikowany kluczem key już będzie istnieć.

       Podczas tworzenia, 9 najmniej znaczących bitów argumentu semflg określa
       prawa  dostępu  do zestawu semaforów (dla właściciela, grupy i innych).
       Prawa dostępu mają ten sam format i takie samo znaczenie,  co  parametr
       mode funkcji systemowych open(2) i creat(2) (bity praw uruchamiania nie
       są  istotne  dla  semaforów,  natomiast  bity  praw  zapisu   oznaczają
       możliwość zmiany wartości semaforów).

       Podczas   tworzenia   nowego   zestawu  semaforów  semget  inicjalizuje
       strukturę semid_ds związaną z zestawem semaforów w następujący sposób:

              sem_perm.cuid oraz sem_perm.uid  przypisany  zostanie  efektywny
              identyfikator użytkownika procesu wywołującego.

              sem_perm.cgid  oraz  sem_perm.gid  przypisany zostanie efektywny
              identyfikator grupy procesu wywołującego.

              9 najmniej znaczącym bitom pola sem_perm.mode zostaną przypisane
              ich odpowiedniki z parametru semflg.

              Polu sem_nsems przypisania zostanie, zawarta w parametrze nsems,
              liczba semaforów w zestawie.

              sem_otime przyjmie wartość 0.

              sem_ctime przypisany zostanie aktualny czas.

       Parametr nsems może mieć wartość 0 (nie jest brany  pod  uwagę),  jeśli
       nie  będzie tworzony zestaw semaforów.  W przeciwnym przypadku parametr
       nsems musi być większy od 0 i mniejszy lub  równy  maksymalnej  liczbie
       semaforów w zestawie (SEMMSL).

       Jeśli  zestaw  semaforów  już  istnieje,  wówczas weryfikowane są prawa
       dostępu.

WARTOŚĆ ZWRACANA

       W wyniku pomyślnego wykonania wywołania, funkcja  zwróci  identyfikator
       zestawu  semaforów (nieujemną liczbę całkowitą). W przeciwnym przypadku
       zwróci -1, zaś zmiennej errno zostanie przypisany kod wskazujący rodzaj
       błędu.

BŁĘDY

       W  przypadku  niepowodzenia, zmiennej errno zostanie przypisana jedna z
       następujących wartości:

       EACCES     Zestaw semaforów identyfikowany kluczem  key  istnieje,  ale
                  proces wywołujący nie ma praw dostępu do niego.

       EEXIST     Zestaw  semaforów  o  identyfikatorze  key  istnieje,  ale w
                  parametrze  semflg  przekazane  zostały   jednocześnie   oba
                  znaczniki IPC_CREAT i IPC_EXCL.

       ENOENT     Nie ma zestawu semaforów o identyfikatorze key, zaś znacznik
                  IPC_CREAT nie został przekazany w parametrze semflg.

       EINVAL     nsems jest mniejsze  niż  0  lub  większe  niż  ograniczenie
                  liczby  semaforów w zestawie (SEMMSL), lub zestaw semaforów,
                  do któregoodnosi się key już istnieje a nsems  jest  większe
                  niż liczba semaforów w tym zestawie.

       ENOMEM     Zestaw  semaforów  powinien  zostać  utworzony, ale zabrakło
                  pamięci na nową strukturę danych.

       ENOSPC     Nastąpiła próba przekroczenia ograniczenia  liczby  zestawów
                  (SEMMNI),  lub łącznej liczby semaforów w systemie (SEMMNS).

UWAGI

       Stała IPC_PRIVATE nie jest znacznikiem, tylko specjalną wartością  typu
       key_t.   Jeśli  zostanie  ona  przekazana  jako  wartość parametru key,
       wówczas  (w  razie  pomyślnego  wykonania)  funkcja  systemowa  pominie
       wszystko oprócz najmniej znaczących 9 bitów semflg, tworząc nowy zestaw
       semaforów, nie posiadający identyfikatora.

       Występują następujące  ograniczenia  zasobów  systemowych,  związane  z
       wywołaniem semget:

       SEMMNI     Maksymalna  liczba zestawów semaforów w systemie: zależna od
                  polityki.

       SEMMSL     Maksymalna  liczba  semaforów   w   zestawie:   zależna   od
                  implementacji (aktualnie 500).

       SEMMNS     Maksymalna liczba semaforów w systemie: zależna od polityki.
                  Wartość większa niż SEMMSL * SEMMNI pozbawia to ograniczenie
                  sensu.

USTERKI

       Wybrana  nazwa,  IPC_PRIVATE,  prawdopodobnie nie jest najszczęśliwsza.
       IPC_NEW w sposób  bardziej  przejrzysty  odzwierciedlało  by  rolę  tej
       wartości.

       Struktury  danych  skojarzone z poszczególnymi semaforami z zestawu nie
       są inicjalizowane przez wywołanie  systemowe.  Aby  zainicjalizować  te
       struktury,  należy  następnie użyć dla tego zestawu semaforów wywołania
       semctl(2) z rozkazami SETVAL lub SETALL.

ZGODNE Z

       SVr4, SVID.  SVr4 dokumentuje dodatkowe  stałe  błędów:  EFBIG,  E2BIG,
       EAGAIN, ERANGE, EFAULT.

ZOBACZ TAKŻE

       ftok(3), ipc(5), semctl(2), semop(2)