inter-process-comm
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
| inter-process-comm [2016/04/19 10:50] – [Neblokující roura] djbuldog | inter-process-comm [2025/08/28 10:09] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| - | ====== Mezi-procesová komunikace ====== | + | ====== Mezi-procesová komunikace |
| * sdílená paměť | * sdílená paměť | ||
| Řádek 8: | Řádek 8: | ||
| * POSIX_Message_Queues | * POSIX_Message_Queues | ||
| * DBus | * DBus | ||
| + | |||
| + | ===== Sdílená paměť ===== | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | * POSIX Shared Memory Operations [[http:// | ||
| + | * mmap(2) - Map a file or shared memory object into the address space. | ||
| + | * shm_open(2) - Create, or gain access to, a shared memory object. | ||
| + | * shm_unlink(2) - Destroy a shared memory object when no references to it remain open. | ||
| + | * http:// | ||
| + | * všechny procesy mají přístup do paměti ihned | ||
| + | * začíná se voláním '' | ||
| + | * pro přístup do sdílené paměti musí procesy použít stejný name... což je string, například pathname | ||
| + | |||
| + | * System V Shared Memory Functions [[http:// | ||
| + | * shmget(2) - Create a shared memory IPC object or return the ID of one. | ||
| + | * shmctl(2) - Get the status of a shared memory segment, change permissions or user IDs, or lock or unlock a segment in memory. | ||
| + | * shmat(2) - Attach a shared memory segment to the address space. | ||
| + | * shmdt(2) - Detach a shared memory segment from the address space. | ||
| + | |||
| + | ==== Zamykaní ==== | ||
| + | |||
| + | * obecně existuje zámek (mutex) nebo semafor (semaphor) | ||
| + | * mutex | ||
| + | * pouze jeden proces/ | ||
| + | * dá se říct, že je to semafor s číslem 1 | ||
| + | * slouží k serializaci přístupu | ||
| + | * semafor | ||
| + | * nastaví se počet X, kolik procesů/ | ||
| + | * slouží k omezení paralelního přístupu na max X | ||
| + | |||
| + | Existuje C++ třída mutex | ||
| + | |||
| + | POSIX semafory [[http:// | ||
| + | * pojmenované semafory | ||
| + | * identifikuje se jménem se ve tvaru "/ | ||
| + | * vytváří se jako soubor v /dev/shm s názvem " | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * nepojmenované semafory | ||
| + | * identifikuje se číslem | ||
| + | * vytváří se v paměti | ||
| + | * jako globální proměnná - mezi vlákny | ||
| + | * ve sdílené paměti - mezi procesy | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | System V Semafor [[http:// | ||
| + | * oprávnění se nastavuje 9 bitovým číslem (obdoba oprávnění u souboru), tedy například 666 | ||
| + | * '' | ||
| + | * '' | ||
| + | * semafor prý existuje, i když všechny procesy skončí!!! | ||
| + | * lze vypsat přes ipcs -s | ||
| ===== Nepojmenovaná roura ===== | ===== Nepojmenovaná roura ===== | ||
| Řádek 76: | Řádek 134: | ||
| <code c> | <code c> | ||
| + | struct timeval tv; | ||
| fd_set rfds; | fd_set rfds; | ||
| fd_set wfds; | fd_set wfds; | ||
| + | int nfds; | ||
| + | |||
| + | // set highest pipe FD +1 | ||
| + | nfds = (pipefd[0]> | ||
| while(...) { | while(...) { | ||
| FD_ZERO(& | FD_ZERO(& | ||
| - | FD_SET(rpipe_fd,& | + | FD_SET(pipefd[0],& |
| FD_ZERO(& | FD_ZERO(& | ||
| - | FD_SET(wpipe_fd,& | + | FD_SET(pipefd[1],& |
| + | tv.tv_sec = 5; | ||
| + | tv.tv_usec = 0; | ||
| + | | ||
| if (select(nfds, | if (select(nfds, | ||
| fprintf(stderr," | fprintf(stderr," | ||
| } | } | ||
| - | if (FD_ISSET(rpipe_fd, &rfds)) { | + | if (FD_ISSET(pipefd[0], &rfds)) { |
| .. | .. | ||
| // do reading | // do reading | ||
inter-process-comm.1461055830.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)
