fifo(7)

NAZWA
fifo - plik specjalny FIFO, potok nazwany, łącze nazwane

OPIS
Plik specjalny FIFO (ang. first-in first-out – pierwszy na wejściu, pierwszy na wyjściu; zwany również potokiem nazwanym lub łączem nazwanym) jest podobny do potoku, lecz jest dostępny jako część systemu plików. Może go otworzyć do odczytu i zapisu wiele procesów. Gdy procesy wymieniają dane przez FIFO, jądro przekazuje wszystkie dane wewnętrznie, bez zapisywania do systemu plików. Z tego powodu specjalny plik FIFO nie ma zawartości w systemie plików; wpis systemu plików służy jedynie jako punkt odniesienia, dzięki któremu procesy mogą uzyskać dostęp do potoku za pomocą nazwy w systemie plików.

Jądro utrzymuje dokładnie jeden obiekt potoku dla każdego pliku specjalnego FIFO, który jest otwarty przez choć jeden proces. FIFO musi być otwarty na obu końcach (do odczytu i do zapisu), zanim dane mogą być przekazane. Zwykle otwarcie FIFO blokuje, dopóki nie zostanie otwarty również drugi koniec.

Proces może otworzyć FIFO w trybie nieblokującym. W takim przypadku otwarcie tylko do odczytu powodzi się nawet wówczas, gdy nikt nie otworzył jeszcze końca do zapisu, natomiast otwarcie tylko do zapisu zawodzi z błędem ENXIO (brak takiego urządzenia lub adresu), chyba że drugi koniec został już otworzony.

W Linuksie, otwarcie FIFO do odczytu i zapisu powiedzie się zarówno w trybie blokującym, jak i nieblokującym. POSIX nie definiuje tego zachowania. Można to wykorzystać do otwarcia FIFO do zapisu, gdy nie są dostępni odczytujący. Proces używający obu końców połączenia do komunikacji ze sobą, powinien wykazywać się dużą ostrożnością, aby uniknąć zakleszczeń.

UWAGI
Szczegóły semantyki wejścia/wyjścia FIFO opisano w podręczniku pipe(7).

Gdy proces spróbuje zapisać do FIFO, które nie jest otwarte do odczytu na drugim końcu, otrzyma sygnał SIGPIPE.

Pliki specjalne FIFO można tworzyć za pomocą mkfifo(3) i są wskazywane przez polecenie ls -l jako posiadające typ pliku 'p'.

ZOBACZ TAKŻE
mkfifo(1), open(2), pipe(2), sigaction(2), signal(2), socketpair(2), mkfifo(3), pipe(7)

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.