1 / 13

Komunikacja między procesami

Komunikacja między procesami. Pipes. Jest to sposób komunikacji między procesami. Polega na współdzieleniu pamięci. Proces który tworzy pipe jest serwerem a proces łączący się z nim to klient. Wyróżniamy dwa typy potoków, nazwane i anonimowe. Potoki anonimowe.

marlon
Download Presentation

Komunikacja między procesami

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Komunikacja między procesami

  2. Pipes • Jest to sposób komunikacji między procesami. Polega na współdzieleniu pamięci. Proces który tworzy pipe jest serwerem a proces łączący się z nim to klient. • Wyróżniamy dwa typy potoków, nazwane i anonimowe.

  3. Potoki anonimowe • Zawsze wykorzystywane lokalnie, nie w komunikacji sieciowej. • Tworzymy za pomocą funkcji CreatePipe • Po wywołaniu funkcji dostajemy uchwyty do zapisu i odczytu, póki one nie zostaną zamknięte (CloseHandle) potok będzie istniał (chyba, że działanie procesu zostanie zakończone.

  4. Potoki anonimowe c.d. • By zapisywać i odczytywać dane z potoku wykorzystujemy funkcje WriteFile i ReadFile. • Wykorzystują one uchwyty które otrzymujemy po wykonaniu CreatePipe.

  5. CreatePipe() Funkcja tworzy potok nienazwany. Taki pipe można używać w ramach jednego procesu. BOOL CreatePipe( PHANDLE hReadPipe, PHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize )

  6. CreateNamedPipe() Funkcja tworzy potok nazwany. Można go wykorzystywać do komunikacji między procesami. HANDLE CreateNamedPipe( LPCTSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTESlpSecurityAttributes )

  7. CreateNamedPipe() c.d. lpName – nazwa potoku, która musi mieć postać: \\.\pipe\nazw

  8. CreateNamedPipe() c.d. dwOpenMode – tryb dostępu do potoku - PIPE_ACCESS_DUPLEX – zapis i odczyt, - PIPE_ACCESS_INBOUND – od klienta do serwera, - PIPE_ACCESS_OUTBOUND – od serwera do klienta, oraz dodatkowe flagi: - FILE_FLAG_WRITE_THROUGH – bez buforowania; istotne tylko przy komunikacji przez sieć, - FILE_FLAG_OVERLAPPED – tryb overlapped (asynchroniczny

  9. CreateNamedPipe() c.d. dwPipeMode – tryb pracy potoku, sposób zapisu: - PIPE_TYPE_BYTE – zapis do potoku binarny - PIPE_TYPE_MESSAGE – zapis tekstowy (tylko w trybie overlapped!) sposób odczytu: - PIPE_READMODE_BYTE – odczyt z potoku binarny - PIPE_READMODE_MESSAGE – odczyt tekstowy (tylko przy zapisie tekstowym!) oraz blokowanie I/O: - PIPE_WAIT – potok blokujący - PIPE_NOWAIT – potok nieblokujący (kompatybilność wstecz, niezalecane

  10. CreateNamedPipe() c.d. Przykład: HANDLE Pipe; Pipe = CreateNamedPipe ( "\\\\.\\pipe\\TestowyPipe", PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, 1, 2048, 2048, 1000, NULL);

  11. ConnectNamedPipe() Funkcja czeka aż klient zostanie połączony ze stworzonym wcześniej potokiem nazwanym. BOOL ConnectNamedPipe( HANDLE hNamedPipe, LPOVERLAPPED lpOverlapped ); Przykład: ConnectNamedPipe (Pipe, NULL)

  12. DisconnectNamedPipe() Rozłącza potok od strony serwera. BOOL DisconnectNamedPipe( HANDLE hNamedPipe, );

  13. Linki • http://msdn.microsoft.com/en-us/library/aa365780(v=vs.85).aspx • http://msdn.microsoft.com/en-us/library/aa365799(v=vs.85).aspx

More Related