13

Komunikacja między procesami

  • Upload
    marlon

  • View
    62

  • Download
    3

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: Komunikacja między procesami
Page 2: Komunikacja między procesami

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.

Page 3: Komunikacja między procesami

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.

Page 4: Komunikacja między procesami

By zapisywać i odczytywać dane z potoku wykorzystujemy funkcje WriteFile i ReadFile.

Wykorzystują one uchwyty które otrzymujemy po wykonaniu CreatePipe.

Page 5: Komunikacja między procesami

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)

Page 6: Komunikacja między procesami

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_ATTRIBUTES lpSecurityAttributes)

Page 7: Komunikacja między procesami

lpName – nazwa potoku, która musi mieć

postać: \\.\pipe\nazw

Page 8: Komunikacja między procesami

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

Page 9: Komunikacja między procesami

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

Page 10: Komunikacja między procesami

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

Page 11: Komunikacja między procesami

Funkcja czeka aż klient zostanie połączony ze stworzonym wcześniej potokiem nazwanym.

BOOL ConnectNamedPipe( HANDLE hNamedPipe,LPOVERLAPPED lpOverlapped);

Przykład: ConnectNamedPipe (Pipe, NULL)

Page 12: Komunikacja między procesami

Rozłącza potok od strony serwera.

BOOL DisconnectNamedPipe( HANDLE hNamedPipe,);

Page 13: Komunikacja między procesami

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

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