Komunikace mezi procesy
-=-=-=-=-=-=-=-=-=-=-=-=-
"Are [Linux users] lemmings collectively jumping off of the cliff of
reliable, well-engineered commercial software?"
-- Matt Welsh
Klasický UNIX nabízel jeden jednoduchý prostředek pro komunikaci
- pipe. To je cosi jako soubor ale nikam se neukládá. Pokud pipe
otevřete, dostanete dva file descriptory - do jednoho zapisujete
a zdruhého můžete číst. Komunikace tedy funguje pouze mezi rodičem
a potomkem ale přesto je velmi užitečná. Například:
ls | more
V dosu vyžaduje dočasný soubor s výstupem ls. V UNIXu shell
vytvoří pipe. Do jedné strany nechá ls zapisovat a druhou stranu
předá more pro čtení. More tedy zobrazuje zároveň co ls pracuje
a není nutné dělat žádné dočasné soubory.
Proto, aby mohly i jiné procesy spolu komunikovat vzniklo
fifo (first in first out). To je vlastne pipe ale má jméno. Je to
tedy soubor na disku a po jeho otevření se můžete spojit s jiným
procesem.
Mikrojádra zase většinou nabízí komunikaci pomocí zpráv. Každý
server čeká na určitém portu a program, když po něm neco chce proste
pošlě message s daným příkazem na jeho port. Otevře si teké svůj
port a počká na odpověď. Tento mechanizmus se potom velice snadno
posílá přes síť.
BSD UNIX zavedl sockety. To je opět cosi jako pipe, ale funguje
i přes síť a má některá další rozšíření.
SystemV do UNIXu zase přidal IPC (Interprocess communication).
To má funkce pro semafory, sdílenou pamět a zprávy.
výheň