08

08



Komunikacja między procesami w Unixie i argv. W sekcji deklaracyjnej klienta rezerwowane jest miejsce w pamięci na wskaźnik typu CLIENT. Opis tego typu zamieszczono na ilustracji 9.10.

Ilustracja 9.10. Struktura danych CLIENT

/* Uchwyt rpc klienta.

*    Tworzony przez poszczególne implementacje.

*    Za zainicjowanie jest odpowiedzialny klient */

typedef struct (

AUTH *cl auth;    /* autentykator */

•enum clnt_stat

(*cl cali) 0;

/*

wywołanie procedury zdalnej */

void

(*cl_abort) 0 ;

/*

anulowanie wywołania */

void

(*cl_geterr) 0;

/*

pobranie kodu błęu */

boolt

(*cl_freeres)();

/*

zwolnienie wyników */

void

(*cl_destroy)();

/*

zniszczenie tej structury */

booł t

<*cl control)();

/*

ioctlO dla rpc */

>    *cl_ops;

caddr_t    cl_private ;    /* prywatne */

char    *cl_netid;    /*    identyfikator sieci    */

char    *cl_tp;    /*    nazwa urządzenia */

) CLIENT;


stract clnt_ops (

Definicja struktury CLIENT (instrukcja typedef) znajduje się w pliku nagłówkowym <rpc/ clnt. h>.Wskaźnik do tej struktury będzie używany podczas generowania identyfikatora (uchwytu) klienta. Po deklaracjach w programie 9.3 znajduje się fragment kodu uzyskujący nazwę hosta, w którym będzie działał serwer. W poprzednim uruchomieniu nie miało to znaczenia, ponieważ i tak kod był wykonywany lokalnie. Jednakże w tym nowym środowisku proces-klient musi znać nazwę hosta, w którym działa serwer. Nazwa ta jest przekazywana poprzez linię poleceń jako pierwszy argument procesu hello_client. Nie ma żadnego sprawdzania poprawności, umożliwiającego na przykład stwierdzenie, czy host jest w ogóle dostępny. W dalszej kolejności tworzony jest uchwyt klienta. Odbywa się to za pomocą funkcji bibliotecznej dnt_create. Należy ona do garnituru funkcji obsługujących zdalne procedury. Jej definicję przedstawiono w tabeli 9.3.

Funkcja dnt_create wymaga podania czterech argumentów. Pierwszym jest host—wskaźnik na ciąg znaków. Za jego pomocą podaje się nazwę hosta, w którym będzie działał proces-serwer. Następne dwa argumenty, prognum i versnum, określają odpowiednio numer programu oraz jego wersji. Parametr nettype służy do określania klasy protokołu transportowego. Argumentem tym jest z reguły jedną ze stałych z tabeli 9.4.

Tabela 9.3. Zestawienie informacji o funkcji clnt_create

Pliki włączane

<rpc/rpc.h>

Rozdział

podręcznika

3N

Prototyp

CLIENT *clnt_create( const char *host, const u_long prognum, const u_long versum, const char *nettype );

Zwracana

wartość

Sukces

Niepowodzenie

Czy zmienia errno

Poprawny identyfikator (uchwyt) klienta

NULL

Tak

Tabela 9.4. Ciąg znaków

Typy sieci

Onis (nodeimowana rbiałanie)

netpath lub NULL

Sprawdzenie zmiennej środowiskowej NETPATH, zawierającej listę identyfikatorów sieci, oddzielonych dwukropkami. Zostaną wypróbowane podane protokoły transportowe (patrz tabela 9.5). jeden po drugim, od lewej do prawej, aż znaleziony będzie ten właściwy. Jeżeli zmienna NETPATH nie jest zainicjowana albo ma wartość NULL, widoczny będzie domyślny typ sieci (nettype)

visible

Przeglądanie sekwencyjne pliku /etc/netconfig i wybranie protokołów transportowych z ustawionym znacznikiem " v" tvisible). Operacja zostanie zakończona w chwili odnalezienia protokołu transportowego

circuit_v

Podobnie jak dla ciągu visible, ale wybieranie tylko protokołów transportowych zorientowanych na połączenia (tpi cots lub tpi_cots ord)

datagram_v

Podobnie jak dla ciągu visible, ale wybieranie tylko protokołów transportowych bezpołącze-niowych (tpi cits)

circult_n

Podobnie jak dla ciągu netpath, ale wybieranie tylko protokołów transportowych datagramo-wych zorientowanych na połączenia (tpi cots lub tpi cots ord)

datagram_n

Podobnie jak dla ciągu netpath, ale wybieranie tylko protokołów transportowych datagramo-wych bezpotączeniowych (tpi_clts)

udp

Protokół UDP

tcp

Protokół TCP

Przykładowy plik /etc/netconf ig z hosta autora pokazano w tabeli 9.5

259


Wyszukiwarka

Podobne podstrony:
Komunikacja między procesami w Unixie_ ■    Jeżeli klient wysunie kilka identycznych
Komunikacja między procesami w Unixie powinno się używać w odniesieniu do poleceń, które nie prowadz
Komunikacja między procesami w Unixiedo naszych badań wybierzemy tylko nieliczne. Zestawienie argume
Komunikacja między procesami w Unixie Jeżeli proces zostanie uruchomiony lokalnie, zostanie również
Komunikacja między procesami w Unixie int * print_hello_l(void *argp, CLIENT *clnt) { static int
Komunikacja między procesami w Unixie (svc_req *) Client);    Wywołać funkcję
Komunikacja między procesami w Unixie    _ rzone przez rpcgen. Plik f act_client. c t
Komunikacja między procesami w UnixieTabela 9.9. Zestawienie informacji o funkcji clnt_destroy Pli
Komunikacja między procesami w Unixie łinclude "fact.h" long
Komunikacja między procesami w Unixie morpheus % factclient morpheus Program do wyliczania silni&nbs
Komunikacja między procesami w Unixie typedef linę *line_ptr; /* wskaźnik na "dużo miejsca"
Komunikacja między procesami w Unixie jest ustawiany na 1 (TRUE). Jeżeli bufor wynikowy został wcześ
Komunikacja między procesami w Unixie_ if (rpc_stat != RPC_SUCCESS) if (rpc_stat !- RPC_TIM£DOUT) (
image001 6. Uzupełnić tabelę nazwami mechanizmów komunikacji między procesami w taki sposób, żeby wł
DSC00273 (6) 6. Uzupełnić tabelę nazwami mechanizmów komunikacji między procesami w taki sposób, żeb
DSC00277 (9) 6. Uzupełnić tabelę nazwami mechanizmów komunikacji między procesami w taki sposób, żeb
1 Komunikacja między procesami w UnixleĆwiczenie 8-8 Czy wynik działania programu 8.6 pozostanie tak
Komunikacja między procesami w Unlxle Funkcja rexec wymaga sześciu argumentów. Pierwszym jest wskaźn

więcej podobnych podstron