Provided by: manpages-pl-dev_0.5-1_all bug

NAZWA

       semget - pobranie identyfikatora zestawu semaforów Systemu V

SKŁADNIA

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

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

OPIS

       Wywołanie  systemowe  semget() zwraca identyfikator zestawu semaforów Systemu V skojarzonego z parametrem
       key. Nowy zestaw składający się z nsems semaforów  zostanie utworzony, jeśli  parametr  key  będzie  mieć
       wartość  IPC_PRIVATE  lub  gdy  zestaw  semaforów  skojarzony  z  key nie istnieje, a w parametrze semflg
       zostanie przekazany znacznik IPC_CREAT.

       Jeśli w parametrze semflg podano zarówno IPC_CREAT, jak i IPC_EXCL oraz już istnieje zestaw  semaforów  o
       kluczu key, to semget() kończy się błędem, ustawiając errno na wartość EEXIST. (Działa to analogicznie do
       O_CREAT | O_EXCL w open(2)).

       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).  Bity te mają ten sam format i takie samo znaczenie, jak parametr mode
       wywołania  open(2)  (prawa  uruchamiania  nie  są istotne dla semaforów, natomiast prawa zapisu oznaczają
       możliwość zmiany wartości semaforów).

       Wartości semaforów w nowo utworzonym zestawie są nieokreślone (POSIX.1-2001 jasno o tym  mówi).  Mimo  że
       Linux, tak jak i wiele innych implementacji, nadaje im wartość początkową równą 0, to przenośne aplikacje
       nie  powinny  zależeć  od  tego  zachowania  i  zamiast tego powinny wyraźnie inicjować semafory żądanymi
       wartościami.

       Podczas tworzenia nowego zestawu semaforów semget() inicjuje  związaną  z  zestawem  semaforów  strukturę
       semid_ds (patrz semctl(2)) w następujący sposób:

              sem_perm.cuid  i  sem_perm.uid  przyjmują  wartość  efektywnego identyfikatora właściciela procesu
              wywołującego.

              sem_perm.cgid  i  sem_perm.gid  przyjmują  wartość  efektywnego   identyfikatora   grupy   procesu
              wywołującego.

              9  najmniej  znaczących  bitów  pola  sem_perm.mode jest kopiowanych z 9 najmniej znaczących bitów
              semflg.

              sem_nsems jest ustawiane na wartość nsems.

              sem_otime przyjmie wartość 0.

              sem_ctime przypisywany jest bieżący 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żeli zestaw semaforów już istnieje, to weryfikowane są uprawnienia.

WARTOŚĆ ZWRACANA

       W przypadku pomyślnego zakończenia, funkcja zwraca identyfikator zestawu semaforów (liczbę nieujemną),  a
       w przeciwnym przypadku zwraca -1 i przypisuje zmiennej errno stosowną wartość.

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 ani nie ma praw
              dostępu do niego, ani nie ma ustawionego atrybutu CAP_IPC_OWNER.

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

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

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

       ENOMEM Zestaw semaforów powinien zostać utworzony, ale w systemie brak jest pamięci na  utworzenie  nowej
              struktury danych.

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

ZGODNE Z

       SVr4, POSIX.1-2001.

UWAGI

       Dołączenie  <sys/types.h>  i  <sys/ipc.h>  nie  jest wymagane na Linuksie ani przez żadną z wersji POSIX.
       Jednak  niektóre  stare  implementacje  wymagają  dołączenia  tych  plików  nagłówkowych,  SVID   również
       dokumentuje  ich  dołączenie.  Aplikacje które mają być przenośne na tego typu stare systemy mogą wymagać
       dołączenia omawianych plików nagłówkowych.

       IPC_PRIVATE nie jest znacznikiem, ale szczególną wartością typu key_t. Jeśli wartość  ta  zostanie  użyta
       jako  parametr  key,  to  system  uwzględni  jedynie  9  najniższych  bitów  parametru  msgflg i (w razie
       powodzenia) utworzy nowy zestaw semaforów.

       Wywołania semget() dotyczą następujące ograniczenia zasobów związanych z zestawami semaforów:

       SEMMNI Maksymalna liczba zestawów semaforów w  systemie:  wartość  zależna  od  lokalnych  ustawień  (pod
              Linuksem   to   ograniczenie   można   odczytać   i   zmienić,   używając   czwartego  pola  pliku
              /proc/sys/kernel/sem).

       SEMMSL Maksymalna liczba semaforów dla danego semid: wartość zależna od implementacji  (pod  Linuksem  to
              ograniczenie można odczytać i zmienić, używając pierwszego pola pliku /proc/sys/kernel/sem).

       SEMMNS Maksymalna  liczba  semaforów  w  systemie: wartość zależna od lokalnych ustawień (pod Linuksem to
              ograniczenie można  odczytać  i  zmienić,  używając  drugiego  pola  pliku  /proc/sys/kernel/sem).
              Wartości większe niż  SEMMSL * SEMMNI nie mają znaczenia.

USTERKI

       Nazwa  IPC_PRIVATE  prawdopodobnie  nie  jest  najszczęśliwsza.  IPC_NEW  w  sposób  bardziej przejrzysty
       odzwierciedlałoby rolę tej wartości.

       semget() nie inicjuje semaforów w zestawie  semaforów.  Aby  zainicjować  semafory,  należy  na  zestawie
       semaforów  użyć  operacji  SETVAL  lub SETALL wywołania semctl(2) (W sytuacji gdy wiele procesów nie wie,
       który pierwszy zainicjuje zestaw semaforów, to aby uniknąć sytuacji wyścigu, można  sprawdzić,  czy  pole
       sem_otime  powiązanej  struktury  danych zwracanej przez operację IPC_STAT wywołania semctl(2) ma wartość
       niezerową).

ZOBACZ TAKŻE

       semctl(2), semop(2), ftok(3), capabilities(7), sem_overview(7), svipc(7)

O STRONIE

       Angielska wersja tej strony pochodzi  z  wydania  3.52  projektu  Linux  man-pages.  Opis  projektu  oraz
       informacje dotyczące zgłaszania błędów można znaleźć pod adresem http://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami   polskiego   tłumaczenia   niniejszej   strony   podręcznika   man   są:  Rafał  Lewczuk  (PTM)
       <R.Lewczuk@elka.pw.edu.p>,   Andrzej   Krzysztofowicz   (PTM)   <ankry@mif.pg.gda.pl>,   Robert   Luberda
       <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>.

       Polskie  tłumaczenie  jest  częścią  projektu  manpages-pl;  uwagi,  pomoc,  zgłaszanie błędów na stronie
       http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją  3.52 oryginału.

Linux                                              2012-05-31                                          SEMGET(2)