Table of Contents

Lab 10 - Meziprocesová komunikace

Procvičovaná témata

Úvod

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:

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

Zobrazení signálu

Seznamte se s přiloženým programem pro zobrazení signálu využivající knihovny OTK a generátorem signálu sgen, které naleznete v adresáři signal_viewer.

OTK je jednoduchá knihova grafických prvků implementovaná v OpenGL. Kompilace může vyžadovat instalaci potřebných knihoven. Např. v operačním systému založeném na Ubuntu to může být libxmu-dev tedy apt install libxmu-dev.

Program sgen je jednoduchý pseudonáhodný generátor EKG signálu, který vypisuje hodnoty signálu na stdout případně do souboru jeli spuštěn jako ./sgen -f vystupni_soubor.dat. Nápovědu k použití programu vyvoláte ./sgen -h.

Program tsignal_viewer.c načítá hodnoty ze stdin případně ze zadaného souboru a vykreslí signál po částech do grafického okna OTK, například jako ./sgen | ./tsignal_viewer

Knihovna OTK je přiložena v adresáři otk_lib. Jedná se o relativně jednouduchou standalone zobrazovací knihovnu založenou na OpenGL. Její použití je zapouzdřeno v modulu xwin_otk_plot s rozhraním

void xwin_init(void);
void xwin_close();
 
void xwin_set_plot(int xrange, float ymin, float ymax);
void xwin_redraw_plot(int n, const float *ticks, const float *values);
void xwin_redraw(void);

Příklad použití je dále demonstrován v tsignal_viewer.c.

Module xwin_otk_plot využivá periodického signálu pro aktualizaci počtu vykreslených snímků za sekund v pravém horním rohu okna. Aktualizace zobrazení je realizována funkcí xwin_redraw(). V příkladu je dále demonstrována obsluha stiknutí tlačítka Exit prostřednictvím callback funkce quit().

Knihovnu OTK a zapouzdřující modul xwin_otk_plot využijete v úloze HW 9B - Vícevláknová aplikace s meziprocesovou komunikací, nicméně pro splění úlohy není nutné využívat periodické signály nebo callback funkce. Naopak je vhodné využít více-vláknového programu a realizovat vykreslování plně synchronně.

Úkoly