NAZWA¶
fcntl - manipulacje na deskryptorze pliku
SKŁADNIA¶
#include <unistd.h>
#include <fcntl.h>
 
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);
OPIS¶
 Uwaga! To tłumaczenie może być nieaktualne!
fcntl dokonuje jednej z wielu różnych operacji na 
fd.
  Wykonywana operacja zdeterminowana jest przez 
cmd.
Obsługa zamknięcia przy uruchomieniu
  (close-on-exec)¶
  - F_DUPFD
 
  - Znalezienie najniższego dostępnego numeru dla
      deskryptora pliku, wiekszego lub równego arg i uczynienie
      deskryptora o tym numerze kopią fd. Jest to inna postać
      dup2(2), korzystająca z konkretnego, zadanego deskryptora.
    
 
    Stare i nowe deskryptory mogą być używane zamiennie.
      Dzielą one blokady, wskaźniki pozycji pliku i flagi; na
      przykład, jeśli pozycja pliku zostanie zmodyfikowana poprzez
      użycie lseek na jednym z deskryptorów, zmieni się
      również pozycja dla drugiego deskryptora.
     
    Te dwa deskryptory nie współdzielą jednak znacznika
      "zamknięcia przy uruchomieniu" (close-on-exec). Znacznik
      ten dla kopii jest wyzerowany, co oznacza, że kopia nie zostanie
      zamknięta podczas wywołania exec.
     
    Po pomyślnym zakończeniu zwracany jest nowy deskryptor. 
  - F_GETFD
 
  - Odczytanie znacznika "zamknięcia przy
      uruchomieniu" (close-on-exec). Jeśli bit FD_CLOEXEC jest
      równy 0, to plik pozostanie otwarty po wykonaniu exec, w
      przeciwnym przypadku zostanie zamknięty.
 
  - F_SETFD
 
  - Nadanie znacznikowi "zamknięcia przy
      uruchomieniu" (close-on-exec) wartości określonej przez bit
      FD_CLOEXEC arg.
 
Znaczniki stanu pliku¶
Z deskryptorem pliku stowarzyszonych jest kilka znaczników inicjalizowanych
  przez 
open(2), które mogą ewentualnie być modyfokowane
  przez 
fcntl(2). Znaczniki są współdzielone przez kopie
  (wykonane za pomocą 
dup(2), 
fork(2), itp.) tego samego
  deskryptora pliku.
 
Znaczniki i ich znaczenie są opisane w 
open(2).
  - F_GETFL
 
  - Odczytanie znaczników deskryptora.
 
  - F_SETFL
 
  - Nadanie tym znacznikom deskryptora, które
      określają stan pliku, wartości określonej przez
      arg. Pozostałe bity (prawa dostępu, znaczniki tworzenia
      pliku) w arg pozostają niezmienione. Pod Linuksem polecenie to
      może zmieniać jedynie znaczniki O_APPEND, O_NONBLOCK, O_ASYNC i
      O_DIRECT.
 
Blokowanie doradcze¶
F_GETLK, 
F_SETLK i 
F_SETLKW służą do
  zakładania, zwalniania i sprawdzania obecności blokad rekordów
  (znanych również jako blokady segmentów lub obszarów
  pliku). Trzeci argument, 
lock, jest wskaźnikiem do struktury
  zawierającej co najmniej następujące pola (kolejność
  nie jest określona).
 
struct flock {
    ...
    short l_type;    /* Rodzaj blokady: F_RDLCK,
                        F_WRLCK, F_UNLCK */
    short l_whence;  /* Sposób interpretacji l_start:
                        SEEK_SET, SEEK_CUR, SEEK_END */
    off_t l_start;   /* Początek (offset) blokady */
    off_t l_len;     /* Liczba blokowanych bajtów */
    pid_t l_pid;     /* PID procesu uniemożliwiającego blokadę
                        (tylko F_GETLK) */
    ...
};
Pola 
l_whence, 
l_start i 
l_len powyższej struktury
  określają zakres bajtów, który chcemy zablokować.
  
l_start jest początkiem (offsetem) blokady i jest interpretowane
  względem: początku pliku (gdy 
l_whence jest równe
  
SEEK_SET); aktualnej pozycji w pliku (gdy 
l_whence jest
  równe 
SEEK_CUR); lub końca pliku (gdy 
l_whence jest
  równe 
SEEK_END). W dwu ostatnich przypadkach 
l_start
  może być liczbą ujemną o ile pozycja nie znajdzie się
  przed początkiem pliku. 
l_len jest liczbą nieujemną (ale
  zobacz UWAGI poniżej) określającą liczbę blokowanych
  bajtów. Można blokować bajty poza końcem pliku, ale nie
  przed jego początkiem. Podanie 0 jako 
l_len ma specjalne
  znaczenie: blokowanie wszystkich bajtów począwszy od pozycji
  określonej przez 
l_whence i 
l_start do końca pliku,
  niezależnie od tego, jaki duży stanie się plik.
Pole 
l_type może służyć do założenia
  blokady dla odczytu (
F_RDLCK) lub dla zapisu (
F_WDLCK) do pliku.
  Dowolna liczba procesów może utrzymywać blokadę dla
  odczytu pliku (blokada wspólna) w pewnym jego obszarze, ale tylko jeden
  proces może utrzymywać blokadę dla zapisu do pliku (blokada
  wyłączna). Blokada wyłączna wyklucza wszelkie inne
  blokady, zarówno wspólne, jak i wyłączne. Pojedynczy
  proces może w danym obszarze pliku utrzymywać blokadę tylko
  jednego rodzaju; gdy w aktualnie zablokowanym obszarze zakładana jest
  nowa blokada, to istniejąca blokada jest przekształcana w
  blokadę nowego typu. (Takie przekształcenie może
  pociągać za sobą podział, skrócenie lub
  połączenie z istniejącą blokadą, gdy zakres
  bajtów podany dla nowej blokady nie pokrywa się dokładnie z
  zakresem istniejącej blokady.)
  - F_SETLK
 
  - Ustawienie blokady dla zakresu bajtów określonego
      przez pola l_whence, l_start and l_len lock
      (gdy l_type jest równe F_RDLCK lub F_WRLCK) albo
      jej zwolnienie (gdy l_type jest równe F_UNLCK).
      Jeśli kolidująca blokada jest utrzymywana przez inny proces,
      funkcja ta zwraca -1 i ustawia errno na EACCES lub
      EAGAIN.
 
  - F_SETLKW
 
  - Podobne do F_SETLK, lecz w sytuacji, gdy na pliku
      założona jest kolidująca blokada czeka na zwolnienie tej
      blokady. Jeśli podczas oczekiwania zostanie przechwycony sygnał,
      funkcja jest przerywana i (po powrocie z funkcji obsługi
      sygnału) powraca natychmiast (zwracając wartość -1 i
      ustawiając errno na EINTR).
 
  - F_GETLK
 
  - Jako argument lock tej funkcji określa
      blokadę, jaką chcielibyśmy założyć na pliku.
      Gdy założenie blokady jest możliwe, fcntl() w
      rzeczywistości jej nie zakłada, lecz zwraca F_UNLCK w
      polu l_type struktury lock pozostawiając inne pola tej
      struktury niezmienione. Jeśli co najmniej jedna niezgodna blokada
      uniemożliwiłaby założenie zadanej blokady, to
      fcntl() zwróci w polach l_type, l_whence,
      l_start i l_len struktury lock informacje
      dotyczące jednej z kolidujących blokad oraz ustawi l_pid
      na wartość PID procesu utrzymującego tę
    blokadę.
 
Aby założyć blokadę do odczytu, deskryptor 
fd musi
  być otwarty do odczytu. Aby założyć blokadę do
  zapisu, deskryptor 
fd musi być otwarty do zapisu. Aby
  założyć obydwa rodzaje blokad, należy otworzyć plik
  do odczytu i zapisu.
Blokady są usuwane w wyniku jawnego 
F_UNLCK, jak też są
  one automatycznie zwalniane gdy proces kończy działanie lub zamyka
  
dowolny deskryptor odnoszący się do pliku, na którym
  blokady są utrzymywane. Jest to złe: oznacza, że proces
  może utracić blokady na pliku takim jak 
/etc/passwd lub
  
/etc/mtab gdy jakaś funkcja biblioteczna zdecyduje się z
  jakiegoś powodu ten plik otworzyć, odczytać i
  zamknąć.
Blokady rekordów nie są dziedziczone przez procesy potomne poprzez
  
fork(2), ale są zachowywane poprzez 
execve(2).
Ze względu na wykonywane przez bibliotekę 
stdio(3) buforowanie,
  należy unikać blokowania rekordów w połączeniu z
  funkcjami z tego pakietu; zamiast tego należy używać
  
read(2) i 
write(2).
Blokowanie obowiązujące¶
(Nie POSIX-owe.) Powyższe blokady plików mogą być albo
  doradcze, albo obowiązujące, a domyślnie są
  obowiązujące. Aby skorzystać z obowiązujących blokad,
  na systemie plików zawierającym blokowany plik musi być
  włączone blokowanie obowiązujące (za pomocą opcji
  "-o mand" programu 
mount(8)) oraz musi być ono
  włączone dla samego pliku (poprzez wyłączenie prawa
  uruchamiania dla grupy i włączenie bitu set-GID).
 
Blokady doradcze nie są wymuszane i są przydatne jedynie pomiędzy
  współpracującymi procesami. Blokady obowiązujące
  są wymuszane dla wszystkich procesów.
Zarządzanie sygnałami¶
F_GETOWN, 
F_SETOWN, 
F_GETSIG i 
F_SETSIG
  służą do zarządzania sygnałami dostępności
  we/wy:
  - F_GETOWN
 
  - Pobranie ID procesu lub grupy procesów aktualnie
      otrzymujących sygnały SIGIO i SIGURG dla zdarzeń na
      deskryptorze plików fd. Grupy procesów są zwracane
      jako wartości ujemne.
 
  - F_SETOWN
 
  - Ustawia ID procesu lub grupy procesów aktualnie
      otrzymujących sygnały SIGIO i SIGURG dla zdarzeń na
      deskryptorze plików fd. Grupy procesów są
      określane za pomocą wartości ujemnych. (F_SETSIG
      może służyć do określenia innego sygnału
      zamiast SIGIO).
    
 
    Jeśli na deskryptorze pliku ustawiony zostanie znacznik stanu
      O_ASYNC (przez usttawienie tego znacznika przy wywołaniu
      open(2), albo przy użyciu polecenia F_SETFL w
      fcntl), to gdy wejście lub wyjście dla tego deskryptora
      pliku stanie się możliwe, wysłany zostanie sygnał
      SIGIO.
     
    Proces lub grupę procesów, które otrzymają sygnał
      można wybrać za pomocą polecenia F_SETOWN w funkcji
      fcntl. Jeśli deskryptor pliku jest gniazdem, określa to
      również odbiorcę sygnałów SIGURG dostarczanych
      gdy poprzez gniazdo przybędą dane autonomiczne. (SIGURG jest
      wysyłany w sytuacjach, w których select(2)
      zgłosiłby "stan wyjątkowy" dla gniazda.)
      Jeśli deskryptor pliku jest skojarzony z urządzeniem
      terminalowym, to sygnały SIGIO są wysyłane do grupy
      procesów pierwszoplanowych tego terminala. 
  - F_GETSIG
 
  - Pobranie numeru sygnału wysyłanego, gdy
      wejście lub wyjście stanie się możliwe.
      Wartość zerowa oznacza wysyłanie SIGIO. Dowolna inna
      wartość (łącznie z SIGIO) stanowi numer sygnału
      wysyłanego zamiast SIGIO. W tych sytuacjach dodatkowe informacje
      mogą być dostępne dla programu obsługi sygnału, o
      ile zostały zainstalowane z użyciem SA_SIGINFO.
 
  - F_SETSIG
 
  - Ustawienie numeru sygnału wysyłanego, gdy
      wejście lub wyjście stanie się możliwe.
      Wartość zerowa oznacza wysyłanie sygnału
      domyślnego, czyli SIGIO. Dowolna inna wartość
      (łącznie z SIGIO) stanowi numer sygnału wysyłanego
      zamiast SIGIO. W tych sytuacjach dodatkowe informacje mogą być
      dostępne dla programu obsługi sygnału, o ile zostały
      zainstalowane z użyciem SA_SIGINFO.
    
 
    Za pomocą F_SETSIG z niezerową wartością i przy
      ustawionym SA_SIGINFO dla programu obsługi sygnału (patrz
      sigaction(2)), można przekazać do programu obsługi
      sygnału w strukturze siginfo_t dodatkowe informacje o
      zdarzeniach we/wy Jeśli pole si_code wskazuje, że
      źródłem jest SI_SIGIO, to pole si_fd zawiera
      deskryptor pliku związany ze zdarzeniem. W przeciwnym przypadku, brak
      jest wskazania, które deskryptory plików oczekują i do
      określenia dostępnych dla we/wy deskryptorów plików
      należy używać zwykłych mechanizmów
      (select(2), poll(2), read(2) z ustawionym
      O_NONBLOCK itd.),
     
    Wybierając sygnał czasu rzeczywistego wg POSIX.1b
      (wartość >= SIGRTMIN), można, używając tych
      samych numerów sygnałów, spowodować umieszczenie w
      kolejce wielu zdarzeń we/wy. (Kolejkowanie zależy od
      dostępnej pamięci.) Jak powyżej, dodatkowe informacje
      są dostępne, gdy programy obsługi sygnałów
      zostały zainstalowane z ustawionym SA_SIGINFO. 
Za pomocą tych mechanizmów program może zaimplementować w
  pełni asynchroniczne we/wy nie używając przez
  większość czasu 
select(2) i 
poll(2).
Opisane powyżej korzystanie z 
O_ASYNC, 
F_GETOWN,
  
F_SETOWN jest specyficzne dla BSD i Linuksa. 
F_GETSIG i
  
F_SETSIG są specyficzne dla Linuksa. POSIX posiada asynchroniczne
  we/wy i strukturę 
aio_sigevent służącą do
  podobnych celów; w Linuksie są one również dostępne
  jako część biblioteki GNU C (glibc).
Dzierżawy¶
F_SETLEASE i 
F_GETLEASE (od Linuksa 2.4 wzwyż)
  służą do (odpowiednio) ustanowienia i pobrania aktualnego
  ustawienia dzierżawy na pliku określonym przez 
fd dla procesu
  wywołującego funkcję. Dzierżawa pliku zapewnia mechanizm,
  w którym proces utrzymujący dzierżawę
  ("dzierżawca") jest zawiadamiany (poprzez dostarczenie
  sygnału) o tym, że inny proces ("współzawodnik")
  próbuje wykonać 
open(2) lub 
truncate(2) na tym pliku.
  - F_SETLEASE
 
  - Ustawia lub usuwa dzierżawę pliku w
      zależności od tego, która z następujących
      wartości zostanie podana jako argument arg typu integer :
    
 
   
  - F_RDLCK
 
  - Wzięcie dzierżawy odczytu. Spowoduje to
      zawiadamianie o otwarciu pliku do zapisu lub jego obcięciu przez inny
      proces.
 
  - F_WRLCK
 
  - Wzięcie dzierżawy zapisu. Spowoduje to
      zawiadamianie o otwarciu pliku (do odczytu lub do zapisu) lub
      obcięciu go przez inny proces. Dzierżawa zapisu może
      zostać nałożona na plik tylko wtedy, gdy plik ten nie jest
      aktualnie otwarty przez żaden inny proces.
 
  - F_UNLCK
 
  - Zdjęcie własnej dzierżawy z pliku.
 
 
Proces może utrzymywać na pliku dzierżawę tylko jednego
  typu.
Dzierżawy można pobierać tylko dla zwykłych plików.
  Proces nieuprzywilejowany może pobierać jedynie dzierżawy na
  plikach, których UID odpowiada UID-owi systemu plików dla danego
  procesu.
  - F_GETLEASE
 
  - Wskazuje rodzaj dzierżawy utrzymywanej przez aktualny
      proces na pliku określonym przez deskryptor fd, zwracając
      F_RDLCK, F_WRLCK albo F_UNLCK, w zależności
      od tego, czy (odpowiednio) aktualny proces utrzymuje dzierżawę
      odczytu, zapisu, czy nie utrzymuje żadnej dzierżawy na danym
      pliku. (Trzeci argument fcntl() jest pomijany.)
 
Gdy współzawodnik wykona operację 
open() lub
  
truncate() kolidującą z dzierżawą ustanowioną
  poprzez 
F_SETLEASE, wywołanie funkcji systemowej jest blokowane
  przez jądro (chyba że w 
open(), podano znacznik
  
O_NONBLOCK kiedy powraca ona natycmiast zgłaszając
  błąd 
EWOULDBLOCK). Jądro zawiadamia wówczas
  dzierżawcę poprzez wysłanie sygnału (domyślnie
  SIGIO). Dzierżawca powinien odpowiedzieć na otrzymanie tego
  sygnału wykonując porządki niezbędne dla przygotowania
  pliku do dostępu przez inny proces (np. zrzucenie buforów) a
  następnie usunięcie swojej dzierżawy poprzez wykonanie
  polecenia 
F_SETLEASE podając jako 
arg F_UNLCK.
 
Jeśli dzierżawca nie zwolni dzierżawy w ciągu podanej w
  
/proc/sys/fs/lease-break-time liczby sekund, a wywołanie funkcji
  systemowej przez współzawodnika pozostaje zablokowane (tzn.
  współzawodnik nie podał 
O_NONBLOCK w swoim
  wywołaniu funkcji 
open(), ani też wywołanie funkcji
  systemowej nie zostało przerwane przez obsługę sygnału),
  to jądro wymusi przerwanie dzierżawy przez dzierżawcę.
 
Po dobrowolnym lub wymuszonym usunięciu dzierżawy, pzry
  założeniu, że wywołanie funkcji systemowej przez
  współzawodnika nie jest nieblokujące, jądro pozwala na
  kontynuację funkcji systemowej wywołanej przez
  współzawodnika.
 
Domyślnym sygnałem stosowanym do zawiadamiania dzierżawcy jest
  SIGIO, lecz można go zmienić za pomocą polecenia
  
F_SETSIG w 
fcntl (). Jeśli wydano polecenie 
F_SETSIG
  (nawet podając SIGIO), a funkcja obsługi sygnału została
  określona za pomocą SA_SIGINFO, to ta funkcja obsługi otrzyma
  jako drugi argument strukturę 
siginfo_t, której pole
  
si_fd będzie zawierać deskryptor dzierżawionego pliku,
  do którego uzyskuje dostęp inny proces. (Jest to przydatne, gdy
  wywołujący utrzymuje dzierżawy na wielu plikach).
Powiadamianie o zmianach pliku lub katalogu¶
  - F_NOTIFY
 
  - (od Linuksa 2.4 wzwyż) Zapewnia powiadamianie o
      modyfikacji katalogu, do którego odnosi się fd lub o
      modyfikacji któregokolwiek z plików w tym katalogu. Zdarzenia,
      powiadamianie o których ma nastąpić są określone
      w arg, będącym maską bitową utworzoną jako
      suma logiczna (OR) zera lub więcej spośród
      następujących bitów:
    
 
    
      
        
        
        
        
      
      
        | Bit | 
        Opis (zdarzenie w katalogu) | 
         | 
         | 
      
      
         | 
      
      
        | DN_ACCESS | 
        Dostęp do pliku (read, pread, readv) | 
         | 
         | 
      
      
        | DN_MODIFY | 
        Modyfikacja pliku (write, pwrite, | 
         | 
         | 
      
      
         | 
        writev, truncate, ftruncate) | 
         | 
         | 
      
      
        | DN_CREATE | 
        Utworzenie pliku (open, creat, mknod, | 
         | 
         | 
      
      
         | 
        mkdir, link, symlink, rename) | 
         | 
         | 
      
      
        | DN_DELETE | 
        Usunięcie pliku (unlink, rename do | 
         | 
         | 
      
      
         | 
        innego katalogu, rmdir) | 
         | 
         | 
      
      
        | DN_RENAME | 
        Zmiana nazwy w obrębie katalogu | 
         | 
         | 
      
      
         | 
        (rename) | 
         | 
         | 
      
      
        | DN_ATTRIB | 
        Zmiana atrybutów pliku | 
         | 
         | 
      
      
         | 
        (chown, chmod, utime[s]) | 
         | 
         | 
      
    
     
    (Uzyskanie ich definicji wymaga zdefiniowania makra _GNU_SOURCE przed
      włączeniem <fcntl.h>.)
     
    Powiadomienia dotyczące katalogów są zazwyczaj jednorazowe,
      więc aplikacja musi się ponownie zarejestrować, aby
      otrzymać dalsze powiadomienia. Alternatywnie, jeśli w arg
      włączono DN_MULTISHOT, to powiadomienia będą
      dokonywane aż do ich jawnego usunięcia. Szereg wywołań
      podających DN_MULTISHOT kumuluje się, przy czym zdarzenia
      w arg są dodawane logicznie do już monitorowanych. Aby
      wyłączyć powiadamianie o jakichkolwiek zdarzeniach,
      należy w wywołaniu F_NOTIFY podać arg
      równe 0.
     
    Powiadamianie odbywa się poprzez dostarczenie sygnału.
      Domyślnym sygnałem jest SIGIO, ele można go amienić za
      pomocą polecenia F_SETSIG w fcntl(). W tym drugim
      przypadku, funkcja obsługi sygnału otrzymuje jako swój
      drugi argument strukturę siginfo_t (gdy funkcja obsługi
      sygnału została określona za pomocą A_SIGINFO) a pole
      si_fd tej struktury zawiera deskryptor pliku, który
      spowodował powiadomienie. (przydatne, gdy utrzymywane są
      dzierżawy na wielu katalogach).
     
    W szczególności, gdy używa się DN_MULTISHOT, do
      zawiadamiania powinien być stosowany sygnał czasu rzeczywistego
      zgodny z POSIX.1b, tak aby mozna było kolekować wiele
    zmian. 
WARTOŚĆ ZWRACANA¶
Wartość zwracana po pomyślnym zakończeniu funkcji
  zależy od operacji:
  - F_DUPFD
 
  - Nowy deskryptor.
 
  - F_GETFD
 
  - Wartość znacznika.
 
  - F_GETFL
 
  - Wartości znaczników.
 
  - F_GETOWN
 
  - Wartość właściciela deskryptora.
 
F_GETSIG Wartość sygnału wysłyanego, gdy odczyt lub
  zapis staną się możliwe, lub zero, dla tradycyjnego zachowania
  SIGIO.
  - Wszystkie pozostałe polecenia
 
  - Zero.
 
Przy błędach zwracane jest -1 i odpowiednio ustawiane 
errno.
BŁĘDY¶
  - EACCES lub EAGAIN
 
  - Operacja jest zabroniona przez blokadę
      utrzymywaną przez inny proces. Albo, operacja jest zabroniona,
      gdyż plik został odwzorowany w pamięci przez inny
    proces.
 
  - EBADF
 
  - fd nie jest deskryptorem otwartego pliku, albo
      było to polecenie F_SETLK lub F_SETLKW a tryb otwarcia
      deskryptora pliku nie odpowiada rodzajowi żądanej blokady.
 
  - EDEADLK
 
  - Stwierdzono, że podane polecenie F_SETLKW
      spowodowałoby zakleszczenie blokad.
 
  - EFAULT
 
  - lock znajduje się poza dostępną dla
      użytkownika przestrzenią adresową.
 
  - EINTR
 
  - Dla F_SETLKW, oznacza, że polecenie
      zostało przerwane przez sygnał. Dla F_GETLK i
      F_SETLK, polecenie zostało przerwane przez sygnał zanim
      blokada została sprawdzona lub ustawiona. Najbardziej prawdopodobne
      podczas blokowania zdalnego pliku (np. blokowanie przez NFS), ale czasmi
      zdaża się lokankie.
 
  - EINVAL
 
  - Dla F_DUPFD, arg jest ujemny, lub
      większy od maksymalnej dozwolonej wartości. Dla F_SETSIG,
      arg nie jest dozwolonym numerem sygnału.
 
  - EMFILE
 
  - Dla F_DUPFD, proces już osiągnął
      maksymalną liczbę otwartych deskryptorów plików.
 
  - ENOLCK
 
  - Zbyt wiele otwartych blokad segmentowych, tablica blokad
      jest pełna lub zawiódł protokół blokowania
      zdalnego (np. dla blokad przez NFS).
 
  - EPERM
 
  - Próbowano wyzerować znacznik O_APPEND na
      pliku posiadającym ustawiony atrybut "append-only".
 
UWAGI¶
Błędy zwracane przez 
dup2 są inne niż zwracane przez
  
F_DUPFD.
 
Począwszy od jądra 2.0, nie ma oddziaływania pomiędzy typami
  blokad zakłądanych przez 
flock(2) i przez 
fcntl(2).
 
POSIX 1003.1-2001 zezwala na ujemne wareości 
l_len. (I jeśli
  wartość jest ujemna, to przedziałem, którego dotyczy
  blokada obejmuje bajty od 
l_start+
l_len do 
l_start-1
  włącznie.) Jednakże, funkcja systemowa z aktualnych jąder
  Linuksa zwraca w tej sytuacji EINVAL.
 
W niektórych systemach struktura 
struct flock zawiera dodatkowe
  pola, takie jak np. 
l_sysid. Oczywiście, samo 
l_pid jest
  mało przydatne, gdy proces utrzymujący blokadę może
  działać na innej maszynie.
 
ZGODNE Z¶
SVr4, SVID, POSIX, X/OPEN, BSD 4.3. Tylko operacje F_DUPFD, F_GETFD, F_SETFD,
  F_GETFL, F_SETFL, F_GETLK, F_SETLK i F_SETLKW są opisane w POSIX.1.
  F_GETOWN i F_SETOWN są BSDizmami niewspieranymi przez SVr4; F_GETSIG i
  F_SETSIG są specyficzne dla Linuksa. 
F_NOTIFY, 
F_GETLEASE i
  
F_SETLEASE są również specyficzne dla Linuksa.
  (Uzyskanie ich definicji wymaga zdefiniowania makra _GNU_SOURCE przed
  włączeniem <fcntl.h>.) Legalne znaczniki dla F_GETFL/F_SETFL
  to te, które są wspierane przez 
open(2) i są tu
  różnice między wymienionymi systemami; O_APPEND, O_NONBLOCK,
  O_RDONLY, i O_RDWR są opisane w POSIX.1. SVr4 wspiera wiele innych opcji
  i znaczników, tutaj nie opisanych.
SVr4 dokumentuje dodatkowe błędy EIO, ENOLINK i EOVERFLOW.
ZOBACZ TAKŻE¶
dup2(2), 
flock(2), 
lockf(3), 
open(2),
  
socket(2)
Zobacz też locks.txt, mandatory.txt i dnotify.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 fcntl
 
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
  znaleźć pod adresem
  
http://sourceforge.net/projects/manpages-pl/.