14

14



Komunikacja między procesami w Unixie    _

rzone przez rpcgen. Plik f act_client. c to szablon klienta. Znów program posłużył się nazwą f act jako bazą i dodał tylko przyrostek _cl ient. c. Zawartość pliku pokazuje ilustracja 9.21.

Ilustracja 9.21. Szablon klienta, fact_client.c, wygenerowany przez rpcgen

/*

*    Ten kod został wygenerowany przez rpcgen.

*    To tylko szablon, którego można używać jako

*    wzorca dla własnych funkcji.

*/

łinclude "fact.h" void%

factorial_l(char *host) {

CLIENT *clnt; long *result_l; int calc_fac_l_arg; łifndef DEBUG

clnt = clnt_create(host, FACTORIAL, ONE, "netpath"); if (clnt — (CLIENT *>. NULL) {

clnt j>createerror (host);

ovit (i i ,

)

łendif /* DEBUG */

result_l - calc_fac_l(Scalc_fac_l_arg, clnt); if (result_l =- (long *) NULL) (

clnt_perror(clnt, "cali failed");

)

łifndef DEBUG

clnt_destroy(clnt); łendif    /* DEBUG */

)

main(int argc, char *argv[ ])    (

char    *host;

if (argc < 2) {

printf("usage:    %s host_server\n", argv[OJ);

exit(1);

host - argv(1); factorial_l (host);

W pliku szablonu rpcgen utworzył funkcję o nawie factorial_l. Nazwa funkcji pochodzi od nazwy programu z pliku definicji protokołu. Dodany do niej przyrostek _1 oznacza numer wersji. Jak widać, funkcja factorial_l otrzymuje w parametrze nazwę hosta. Funkcja służy do uruchamiania wywołań RFC clnt_create oraz wywołania zdalnego calc_fac_l. Warto zwrócić uwagę na to, że na początku procedury znalazły się prawidłowe definicje typów argumentów oraz typu wartości zwracanej przez funkcję. Domyślnie argument nettype dla wywołania systemowego clnt_create został zdefiniowany jako netpath (a nie vis ible, jak w poprzednim przykładzie). Po wywołaniu zdalnej funkcji cal_fac_l następuje sprawdzenie zwracanej przez nią wartości. Jeśli wartość ta jest równa NULL, funkcja biblioteczna clnt_perror wyświetli stosowny komunikat o błędzie (patrz tabela 9.8).

Do wywołania systemowego dnt_perror przekazuje się uchwyt klienta otrzymany z funkcji clnt_create oraz napis z informacjami. Funkcja wyświetli komunikat o błędzie połączony z przekazanym jej napisem, oddzielonym dwukropkiem.

W wygenerowanym kodzie znalazło się również wywołanie funkcji bibliotecznej clnt_de-stroy (patrz tabela 9.9). Funkcja ta umożliwia zwrócenie systemowi zasobów zarezerwowanych przez dnt_create.

Jak można oczekiwać, raz zniszczony uchwyt RPC staje się niezdefiniowany i nie można go więcej używać jako odsyłacza.

Aby ułatwić testowanie, program rpcgen w pliku szablonu umieścił szereg dyrektyw preprocesora. Wydaje się jednak, że przeoczył on fakt, iż wywołanie systemowe clnt_perior wymaga włączenia biblioteki sieciowej i dlatego powinno być umieszczone w komentarzu podczas testowania i uruchamiania aplikacji. Jak w poprzednim przykładzie, jeżeli skorzystamy z opcji -C, a wywołanie zdalnej funkcji wyliczającej potęgę (calc_fac_l) ma zostać wykonane w trybie uruchamiania i testowania, to do nazwy funkcji należy dopisać _svc, a argument clnt rzutować na typ danych (svć_req *).

Tabela 9.8. Zestawienie informacji o funkcji clntjperror

Pliki włączane

<rpc/rpc.h>

Rozdział

podręcznika

3N

Prototyp

void clnt_perror(const CLIENT *clnt, const char *s);

Zwracana

wartość

Sukces

Niepowodzenie

Czy zmienia errno

Wyświetl komunikat na standardowe wyjście błędów

Nie

271


Wyszukiwarka

Podobne podstrony:
Komunikacja między procesami w Unixie int * print_hello_l(void *argp, CLIENT *clnt) { static int
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 i argv. W sekcji deklaracyjnej klienta rezerwowane jest miejsc
Komunikacja między procesami w Unixie Jeżeli proces zostanie uruchomiony lokalnie, zostanie również
Komunikacja między procesami w Unixie (svc_req *) Client);    Wywołać funkcję
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) (
Komunikacja między procesami w Unixle Plik hello. h utworzony przez rpcgen będzie włączany do kodu p
Komunikacja między procesami w Unixle łinclude "hello.h*    /* wygenerowany prze
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

więcej podobnych podstron