inter-process-comm
Toto je starší verze dokumentu!
Obsah
Mezi-procesová komunikace
- sdílená paměť
- nepojmenovaná roura (pipe)
- pojmenovaná roura
- unix soket
- POSIX_Message_Queues
- DBus
Nepojmenovaná roura
- jednosměrná
- dva konce - producent a konzument
- do roury by měl zapisovat nebo z ní číst pouze jeden proces
- čtení je destruktivní (přečtení jedním procesem zruší možnost čtení procesem druhým)
- zápis/čtení do velikosti 'PIPE_BUF' by mělo být atomické (pokud do roury budou zapisovat dva procesy, tak zápisy do uvedené velikosti by se neměli pomíchat dohromady)
- roura se vytváří příkazem
pipe- parametrem je
int[2], kde index 0 je deskriptor pro zápis a index 1 pro čtení
- rouru je potřeba na konci uzavřít příkazem
close - zapisovat lze příkazem
write, číst příkazemread - při čtení z roury, zavřené na druhé straně, se přečte znak EOF
- při zápisu do roury, zavřené na druhé straně, se generuje signál SIGPIPE (ukončí běh aplikace)
#include <unistd.h> int pipefd[2]; pipe(pipefd); .. close(pipefd[0]); close(pipefd[1]);
Spojení s procesem jednosměrně
- poepen
- pclose
Spojení s procesem obousměrně
- vytvořit rouru ipipe pro jeden směr (rodič → potomek)
- vytvořit rouru opipe pro druhý směr (potomek → rodič)
- provést fork
- zavřít nepoužívané deskriptory
- v potomkovi zavřít deskriptor pro zápis do ipipe
- v potomkovi zavřít deskriptor pro čtení do opipe
- v rodiči zavřít deskriptor pro zápis do opipe
- v rodiči zavřít deskriptor pro čtení do ipipe
- ostatní deskriptory použít pro zpracování
- můžeme z nich číst/zapisovat
- můžeme je použít jako náhradu pro stdin (
STDIN_FILENO), stderr (STERR_FILENO) nebo stdout (STDOUT_FILENO)
inter-process-comm.1461054519.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)
