Provided by:
manpages-pl-dev_20051117-1_all 
NAZWA
flock - założenie lub zdjęcie doradczej blokady na otwartym pliku.
SKŁADNIA
#include <sys/file.h>
int flock(int fd, int operation);
OPIS
Zakłada lub zdejmuje doradczą blokadę na otwartym pliku, określonym
przez fd. Parameter operation jest jednym z poniższych:
LOCK_SH Założenie blokady współdzielonej. Więcej niż jeden
proces może ją utrzymywać na danym pliku w danej
chwili.
LOCK_EX Założenie blokady wyłącznej. Tylko jeden proces może
ją utrzymywać na danym pliku w danej chwili.
LOCK_UN Usunięcie istniejącej blokady, założonej przez bieżący
proces.
Wywołanie flock() może się zblokować, gdy inny proces utrzymuje blokadę
niezgodnego typu. Aby uzyskać wywołanie nieblokujące, należy dodać w
dowolnej z powyższych wartości operation LOCK_NB (za pomocą bitowego
OR).
Pojedynczy plik nie może mieć jednocześnie założonej blokady
współdzielonej i wyłącznej.
Blokady utworzone za pomocą flock() są skojarzone z plikiem, lub
dokładniej, z wpisem w tablicy otwartych plików. Oznacza to, że
powielone deskryptory plików (utworzone na przyład za pomocą fork(2)
lub dup(2)) odnoszą się do tej samej blokady i ta blokada może być
zmieniana lub zwalnaina za pomocą dowolnego ze wspomnianych
deskryptorów. Ponadto, blokada zostaje zwolniona albo w wyniku jawnego
wykonania operacji LOCK_UN na dowolnym z tych powielonych deskryptorów,
albo po zamknięciu wszytkich tych deskryptorów.
Proces może utrzymywać dla pliku tylko jeden rodzaj blokady
(współdzieloną lub wyłączną). Późniejsze wywołania flock() są
zachowywane poprzez wywołania execve(2).
Blokada współdzielona lub wyłączna może zostać założona na pliku
niezależnie od trybu otwarcia tego pliku.
WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest
-1 i odpowiednio ustawiane errno.
BŁĘDY
EWOULDBLOCK
Plik jest zablokowany, a był ustawiony znacznik LOCK_NB.
EBADF fd nie jest deskryptorem otwartego pliku.
EINTR Wywołanie zostało przerwane podczas oczekiwania na założenie
blokady w wyniku doręczenia i przechwycenia sygnału przez
procedurę jego obsługi.
EINVAL operation jest niepoprawne.
ENOLCK Zabrakło pamięci dla jądra na przydzielenie rekordów dla blokad.
ZGODNE Z
4.4BSD (funkcja flock(2) pojawiła się pierwotnie w 4.2BSD). Pewna
wersja flock(2), prawdopodobnie zaimplementowana w oparciu o fcntl(2),
pojawia się w większości Uniksów.
UWAGI
flock(2) nie blokuje plików przez NFS. Należy zamiast tego korzystać z
fcntl(2): ta funkcja działa przez NFS, o ile wersja Linuksa jest
dostatecznie nowe i serwer wspiera blokowanie.
Począwszy od jądra 2.0, flock(2) jest zaimplementowane jako samodzielna
funkcja systemowa, zamiast jej emulacji w bibliotece GNU C za pomocą
wywołania fcntl(2). Daje to prawdziwą semantykę BSD: nie ma interakcji
pomiędzy blokadami różnych typów, tworzonymi za pomocą flock(2) oraz
tworzonymi za pomocą fcntl(2). flock(2) Nie wykrywa zakleszczenia
blokad.
flock(2) tworzy jedynie blokady doradcze; proces posiadający
odpowiednie uprawnienia do pliku, może swobodnie zignorować fakt użycia
flock(2) i wykonywac operacje we/wy na tym pliku.
Blokady flock(2) i fcntl(2) posiadają różną semantykę w odniesieniu do
rozgałęzionych procesów oraz dup(2).
ZOBACZ TAKŻE
open(2), close(2), dup(2), execve(2), fcntl(2), fork(2). lockf(3)
Istnieją także pliki locks.txt i mandatory.txt w
/usr/src/linux/Documentation.