En introduktion till FIFO
FIFO står för First In, First Out, och är en typ av rörledning som vi kan skapa på systemet som går att använda mellan helt orelaterade processer. FIFOs fungerar som så att en fil skapas på hårddisken i systemet. Processerna som ska kommunicera med varandra använder sedan den filen. En annan fördel med FIFOs är att vi kan använda dem tillsammas med redan befintliga program. Där vanliga rörledningar inte räcker till kan man ofta använda just FIFO.
En FIFO skapas med mkfifo
-kommandot. Observera att FIFO-filen finns kvar ända
tills dess att den manuellt raderas. Filen kommer inte försvinna ens vid omstart
av systemet.
När vi använder FIFO kommer den sändande sidan att hamna i blockerat läget (blocking state), ända tills någon på “andra sidan” tar emot datan. Detsamma gäller tvärtom; en mottagare som lyssnar på en FIFO efter data, kommer att blockera tills den tagit emot datan och fått ett EOF.
Nu ska vi testa att skapa och använda FIFO:s. Öppna två terminaler på datorn. Här döper vi dem till Terminal 1 och Terminal 2.
Terminal 1
$> mkfifo /tmp/myfifo
$> echo "Hejsan svejsan" > /tmp/myfifo
Nu blir processen ovan blockerad ända tills vi tar emot datan på andra sidan. Låt terminalen vara igång och växla till den andra terminalen.
Terminal 2
$> cat /tmp/myfifo
Hejsan svejsan
Nu blev processen från den första terminalen “klar”, och meddelandet skrevs ut i
terminal 2. Om vi tittar på filen med ls -l
ser vi att den har typen p,
vilket betyder just FIFO (man ls
).
$> ls -l /tmp/myfifo
prw-r--r-- 1 jake wheel 0 Aug 23 02:48 /tmp/myfifo
Eftersom FIFOs är filer kan vi ändra rättigheter på dem så att andra användare kan skriva och läsa till samma FIFO. I exemplet ovan har ägaren till FIFOn läs- och skrivrättigheter, gruppen har läsrättigheter och övriga användare har läsrättigheter. Detta innebär att alla användare på systemet kan läsa meddelanden från just denna FIFO.
Terminal 1
$> whoami
jake
$> echo "Ett nytt meddelande" > /tmp/myfifo
Terminal 2
$> whoami
kalle
$> cat /tmp/myfifo
Ett nytt meddelande
Kalle får däremot inte skriva till FIFOn eftersom han saknar skrivrättigheter till den.
$> whoami
kalle
$> echo "Kalle säger hej" > /tmp/myfifo
bash: /tmp/myfifo: Permission denied
Beroende på vad vi ska använda FIFOn till bör vi sätta rättigheterna 600, så att ingen annan än ägaren själv kan läsa och skriva till FIFOn.
Terminal 1
$> whoami
jake
chmod 600 /tmp/myfifo
$> echo "Ett hemligt meddelande" > /tmp/myfifo
Terminal 2
$> whoami
kalle
cat /tmp/myfifo
cat: /tmp/myfifo: Permission denied
Nu har vi gjort vår FIFO säkrare så att endast ägaren jake kan läsa meddelanden från FIFOn. Notera att meddelandet “Ett hemligt meddelande” fortfarande ligger kvar i FIFOn från ovanstående exempel. Vi kan nu öppna upp en tredje terminal och skriva ytterligare ett meddelande till FIFOn.
Terminal 3
$> whoami
jake
echo "Ett nytt meddelande" > /tmp/myfifo
Nu öppnar vi upp ytterligare en terminal och tar emot båda meddelanden som ligger i FIFOn.
Terminal 4
$> whoami
jake
$> cat /tmp/myfifo
Ett nytt meddelande
Ett hemligt meddelande
Vi kan ta emot data med cat
och lämna processen öppen ända till cat
tar emot
ett EOF (End Of File). Detta kan vi demonstrera med nedanstående exempel.
Terminal 1
$> cat /tmp/myfifo
Processen kommer nu att blockera och väntar på data från FIFOn. Öppna en ny terminal gör enligt nedan.
Terminal 2
$> cat > /tmp/myfile
Hej
Data kommer nu att tas emot i terminal 1 allteftersom
vi skriver nya meddelanden
Nu kan vi fortsätta att skriva meddelanden, och de kommer hela tiden att dyka upp i terminal 1 efterhand som vi skickar dem. Processerna kommer inte att avslutas förrän vi skickar ett EOF genom att trycka CTRL-D.
Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.
Relaterade artiklar
-
Skapa fristående binärer av Python-skript
Docker har blivit det nya sättet att paketera och köra Python-skript, även när skripten körs från exempelvis ett cronjob. Men ibland behöver vi inte en hel Docker-miljö med den overhead det innebär för väldigt små skript. Då är det smidigare att göra om skriptet till en körbar binärfil. Då kan vi även enkelt flytta filen mellan olika Linuxsystem.
-
Hämta data från API:er med cURL och jq
Med cURL och jq går det att extrahera data från API:er direkt från kommandoraden. Jq är en JSON-tolkare och beskrivs av utvecklarna som sed och awk för JSON.
-
Pythonmiljö i Docker
Ett vanligt användningsområde för Docker är att skapa och köra virtuella Pythonmiljöer. Med en Dockerfile och Docker Compose kan vi automatisera hela processen, från skapandet av miljön till exekveringen.
-
Python och trigonometri
Lite uppfräschning av trigonometri och Python är aldrig fel. Här får vi lära oss hur man kan rita upp rätvinkliga trianglar – direkt i Python – om vi känner till två av sidorna. För detta kommer vi att använda modulerna turtle och math.
-
Python i Windows utan installation
Det går att använda Python i Windows, även utan att installera det. Detta är användbart om du har en dator där du inte har rättigheter att installera program. Det kan till exempel vara en skoldator eller arbetsdator.
Senaste nyheterna och inläggen
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Sommarens skånska demopartyn
Årets sommar bjuder på två skånska demopartyn. Först ut är Reunion i Kvidinge den 28–30 juni. Därefter är det Pågadata i Örtofta den 9–11 augusti.
-
Riskerna med BankID som ingen pratar om
BankID är ett säkert och smidigt sätt att identifiera sig online. Men i takt med dess ökade popularitet och användning har det blivit en svag länk – en single point of failure – på mer än ett sätt.
-
Polisernas fängelsedomar står fast
Efter tre år är målet mot de två poliser som olovligen tog sig in i en berusad mans bostad i Landskrona och misshandlade honom klart. Högsta domstolen beslutade den sjätte mars att avvisa överklagan. Fängelsedomarna för poliserna står därmed fast.
Utvalda artiklar
-
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Datorparty i Landskrona
I helgen höll Syntax Society sitt årliga sommarparty. Platsen var en källarlokal i Landskrona där ett femtontal personer medverkade.
-
Det första Pågadata har ägt rum
I helgen ägde det första Pågadata rum – uppföljaren till Gubbdata. Platsen var Folkets Hus i Kvidinge. Organisatör av partyt var Johan “z-nexx” Osvaldsson med hjälp från Jesper “Skuggan” Klingvall. Partyt hade över 100 anmälda deltagare.
-
Även hovrätten fäller poliserna för att ha satt dit oskyldig
Hovrätten fastställer straffet för de två poliser som förra året dömdes till vardera ett års fängelse av Lunds tingsrätt för att ha misshandlat och satt dit en oskyldig man. De båda poliserna ska även betala skadestånd till mannen.
-
Retroloppis i Påarp
Idag var det retroloppis hos Andreas Nilsson i Påarp. På baksidan av huset fanns hundratals spel uppradade på långa bord. Trots friska vindar och sval temperatur var loppisen välbesökt.
CyberInfo Sverige är ett it- och medieföretag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, säkerhet och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.