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