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