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¶
Uwaga! To tłumaczenie może być nieaktualne!
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.
Powyższe tłumaczenie pochodzi z nieistniejącego już
Projektu Tłumaczenia Manuali i
może nie być
aktualne. W razie zauważenia różnic między
powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub
funkcji, prosimy o zapoznanie się z oryginalną
(angielską) wersją strony podręcznika za pomocą
polecenia:
- man --locale=C 2 flock
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.