Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

7 - Meziprocesová komunikace

  • Cílem je ukázat práci s rourami, pojmenovanými rourami a jejich zakomponování do kódu
  • Zbytek cvičení použít ke konzultacím
  • pro vyučující: 07

Výuka

Úvod

  • Připomeňte si, jak funguje přesměrování výstupu a vstupu programů spouštěných v terminálu
  • Jaký je rozdíl mezi operátory > a »?
  • Vypište programem ls všechny složky ve vašem domovkém adresáři a pomocí programu grep nalezněte všechny, které začínají na písmeno D.
    • Jak pomocí přesměrování vstupu a výstupu docílíte předání výstupu z programu ls na vstup programu grep?
    • Znáte i nějaký jiný způsob?

Pojmenovaná roura

Roura (pipe) slouží k propojení výstupu jednoho procesu na vstup druhého procesu, např. ls -l | wc -l. Roury se dělí na dvé katagorie, nepojmenované a pojmenované. Nepojmenované roury jsou typicky UNIXové roury s |. Roury využívají zápis a čtení ze souboru s vlastním souborovým deskriptorem.

Vyzkoušejte následující příkazy v terminálu:

  • ls -l ~ | grep Do
  • echo “Hello World” | tr “[A-Z]” “[a-z]”

Pojmenovaná roura, implementovaná jako fronta FIFO, je využívaná ke komunikaci mezi nepříbuznými programy. Pojmenovaná roura se vytvoří pomocí příkazu mkfifo <pipe name>.

mkfifo /tmp/my_pipe.pipe
Výstup programu ls -l zapište do roury a do souboru
ls -l > /tmp/my_pipe.pipe
ls -l > /tmp/output.txt
Obsah souboru i roury můžeme číst pomocí programu cat
cat < /tmp/my_pipe.pipe

  • Jak se liší obsah souboru output.txt a pojmenované roury?
  • Jak se liší jejich obsah, pokud ho vypíšeme podruhé?

Konzultace

Zbytek cvičení využijte ke konzultacím ohledně HW, mohou být a volitelně rozšířené dle libovolného tématu zájmu

courses/bab36prga/labs/lab07.txt · Last modified: 2020/04/09 10:45 by deckejin