81. Kodowanie i dekodowanie struktur z wskaźnikami 82. Wymiana
Transkrypt
81. Kodowanie i dekodowanie struktur z wskaźnikami 82. Wymiana
81. Kodowanie i dekodowanie struktur z wskaźnikami - kodowanie W razie zdefiniowania w XDR(External Data Representation), struktury zawierającej wskaźniki na inne struktury, podczas kodowania sprawdzane jest, czy dany wskaźnik jest równy NULL, a jeśli nie, to wywoływany jest odpowiedni filtr, kodujący wskazywaną strukturę. Nie nadaje się do struktur cyklicznych ze względu na rekurencyjne wywoływanie kolejnych filtrów (przepełnienie stosu). - dekodowanie Podczas dekodowania struktury, jeśli wskaźnik nie był NULL, to przydzielana jest pamięć dla wskazywanej struktury i wywoływany jest filtr dekodujący ją. Tak niejawnie przydzieloną pamięć naleŜy zwalniać wywołując funkcję: void xdr_free(xdrproc_t proc, char *objp) – proc – filtr, który dekodował dane, – objp – wskaźnik na dekodowana strukturę 82. Wymiana danych i identyfikatory procedur w RPC - wymiana Wszystkie filtry są skojarzone(via xdrrec_create) z funkcjami transmisji danych via gniazdka IP. Mechanizm jest ukryty przed programistą w funkcjach bibliotecznych Rozproszona natura aplikacji narzuca ograniczenia na języki definicji RPC. - identyfikatory 1. Identyfikowanie procedury przez nazwę jest niewystarczające. 2. Numer programu, wykonującego zdalną procedurę: – wg firmy Sun numery 0x20 000 000 – 0x3F FFF FFF zalecane są do wykorzystania. 3. Numer wersji w obrębie programu. 4. Numer procedury w ramach wersji: – numer 0 jest zastrzeŜony (rpcgen dodaje taką procedurę standardowo do testowania działania serwera). 83. Ograniczenia RPC. 1. Zdalna procedura przyjmuje tylko jeden argument (moŜe on być struktura). 2. Wszelkie zmiany dokonane przez procedurę w obrębie jej argumentu pozostają lokalne i nie są przekazywane z powrotem do klienta. 3. Do klienta przekazywany jest wynik procedury jako dowolny typ XDR – np. takŜe struktura. 84. Schemat tworzenia aplikacji rozproszonej wykorzystującej RPC. 85. Identyfikowanie serwerów RPC. 1. Katalog serwerów – obowiązkowy serwis odwzorowujący parę {identyfikator_programu, identyfikator_wersji} w konkretny numer portu (gniazdka IP). 2. Program, uruchamiany przy starcie systemu i nasłuchujący na porcie 111, przechowuje katalog serwerów i odpowiadających im portów: – Linux: portmap - Solaris: rpcbind.