Wstęp

Dzień dobry, dziś przedstawię informacje na temat FIFO. Serdecznie zapraszam.

Co to te FIFO?

W informatyce i teorii systemów FIFO jest metodą organizowania manipulacji strukturą danych, w której najstarszy wpis, czyli „głowa” kolejki, jest przetwarzany jako pierwszy.

Fifo.jpg

Jak to ma się do linuxa?

W linuxie FIFO są nazwane potoki (ang. named pipes). Są to specjalne pliki, podobne do potoków, z tą różnicą, że są one użytkowane jako część systemu plików.

Mogą być otwierane do odczytu i zapisu niezależnie od programu. Fifo nie zajmuje na dysku miejsca. Dzieje się tak dlatego, że dane są przekazywane wewnętrznie przez Kernel. Plik FIFO służy jedynie za referencje, dla programów, by można go używać, korzystając ze ścieżki systemowej.

Potoki FIFO muszą zostać otwarte z obu stron, zanim zostaną użyte. To znaczy, że zanim będziemy mogli przekazać dane, musi być co najmniej jeden producent i jeden konsument. W przeciwnym wypadku kolejka będzie zablokowana i nie będzie przyjmować danych.

kolejka.jpg

Jest możliwe, by otworzyć kolejkę w trybie nieblokującym. Jednak jest to możliwe tylko w trybie Read-Only. Jeśli byśmy chcieli otworzyć kolejkę w trybie write-only, otrzymamy błąd - ENXIO (no such device or address)

Jak to stworzyć?

Do stworzenia kolejki potrzebujemy komendy mkfifo.

Przełącznik -m jest odpowiedzialny za tryb

Tworzenie

Untitled

Odczyt zapis

Untitled

Nie mam jak tu pokazać, jak się zachowują programy przy FIFO. Program cat będzie czekał na dane i dopóki ich nie dostanie, będzie blokował sesje. To samo tyczy się komendy echo, z tym że ona będzie czekała, aż ktoś te dane pobierze.

Próba z FIFO tylko do odczytu

Untitled

Epilog

Na dziś to tyle.

Mam nadzieję, że dowiedziałeś/łaś się czegoś nowego, albo odświeżyłeś/łaś sobie wiedzę. Tak czy inaczej, serdecznie Ci dziękuję, za przeczytanie tego posta. Dodatkowo polecam poczytać man 7 pipe man 7 fifo oraz man 1 mkfifo Jeśli masz potrzebę o cos zapytać, kontakt znajdziesz w zakładce “O Mnie”. A teraz życzę miłego dzionka i smacznej kawusi :) Do widzenia.