fcntl

Autres langues

Langue: pl

Autres versions - même langue

Version: 2002-04-24 (openSuse - 09/10/07)

Section: 2 (Appels système)

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