semget

SEMGET(2)               PodrÄcznik programisty Linuksa               SEMGET(2)



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).

       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 IPC_CREAT i IPC_EXCL okreÅlono w semflg, lecz zestaw semaforów
              dla key już istnieje.

       EINVAL nsems jest mniejsze niż 0 lub wiÄksze niż ograniczenie liczby
              semaforów w zestawie (SEMMSL)

       EINVAL Zestaw semaforów, do którego odnosi siÄ key już istnieje,
              lecz 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.

   Inicjowanie semaforów
       WartoÅci semaforów w nowo utworzonym zestawie sÄ nieokreÅlone
       (POSIX.1-2001 jasno o tym mówi, choÄ POSIX.1-2008 okreÅla, że
       przyszÅa wersja tego standardu może wymagaÄ implementacji inicjujÄcej
       semafory z wartoÅciÄ 0). 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.

       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Ä.

   Limity semaforów
       WywoÅania semget() dotyczÄ nastÄpujÄce ograniczenia zasobów zwiÄzanych
       z zestawami semaforów:

       SEMMNI Limit liczby zestawów semaforów w systemie. W systemach Linux
              przed wersjÄ 3.19 domyÅlna wartoÅÄ tego limitu wynosiÅa 128. Od
              Linuksa 3.19 jest to 32 000. 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 ID semafora. W systemach
              Linux przed wersjÄ 3.19 domyÅlna wartoÅÄ tego limitu wynosiÅa
              250. Od Linuksa 3.19 jest to 32 000. Pod Linuksem to
              ograniczenie można odczytaÄ i zmieniÄ, używajÄc pierwszego
              pola pliku /proc/sys/kernel/sem).

       SEMMNS Limit liczby 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).
              ProszÄ zauważyÄ, że systemowa liczba semaforów jest również
              ograniczona przez iloczyn SEMMSL i SEMMNI.

USTERKI
       Nazwa IPC_PRIVATE prawdopodobnie nie jest najszczÄÅliwsza. IPC_NEW w
       sposób bardziej przejrzysty odzwierciedlaÅoby rolÄ tej wartoÅci.

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 4.07 projektu Linux
       man-pages. Opis projektu, informacje dotyczÄce zgÅaszania bÅÄdów, oraz
       najnowszÄ wersjÄ oryginaÅu można znaleÅºÄ pod adresem
       https://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Ä  4.07 oryginaÅu.



Linux                             2015-02-21                         SEMGET(2)