{{indexmenu_n>7}} ====== 7 - Meziprocesová komunikace ====== * Pro vyučující: [[courses:bab36prga:internal:tutorialinstruction:07|]] * [[https://docs.google.com/presentation/d/11YH4EHmtSnHoUabYxk7qVs5O1TzGku5-S9mL3CQ_D-k/edit?usp=sharing|Prezentace pro cvičení ]] * {{ :courses:bab36prga:labs:lab08_sources.zip | Zdrojové kódy a šablona pro cvičení}} ===== Procvičovaná témata ===== * Práce s rourami, pojmenovanými rourami a jejich zakomponování do kódu * Konzultace ===== Ú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 ''. 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