Provided by: manpages-pl-dev_20051117-1_all bug

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

       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.