09

09



Komunikacja między procesami w Uninie

Semantyka i zastosowania pliku netconfig wykraczają poza ramy tej książki1. Wystarczy rzec, iż dostępna jest rodzina protokołów oznaczonych literą „v" (visible). Ponieważ plik jest przeglądany sekwencyjnie, na tym hoście protokół udp będzie wybrany wtedy, gdy do funkcji clnt_create zostanie przekazany ciąg visible. Jeżeli potrzebny jest protokół niezawodny, ciąg visible należy zastąpić wyrazem tcp.

Tabela 9.5. Typowy plik netconfig

*

ł Plik konfiguracyjny "NetWork Configuration". ł

ł Ktżda pozycja ma postać: ł

ł <identyfikator_sieci> <semantyka> <znaczniki> <rodzina_protokołów> \ ł

ł <nazwa_protokołu> <urządzenie> <biblioteki_nazwa_na_adr> ł

udp

tcpip.so

tpi_clts

V

inet

udp

/dev/udp

switch.so,

tcp

tcpip.so

tpl_cots_ord

V

inet

tcp

/dev/tcp

switch.so.

rawip tcpip.so

tpl_raw

inet

/dev/rawip

switch.so.

ticlts

tpl_clts

V

loopback

-

/dev/ticlts

straddr.so

ticotsord

tpl_cots_ord

V

loopback

-

/dev/ticotsord

straddr.sp

nsp

tpl_cots_ord

-

decnet

nsp

/dev/nsp

straddr.so

ticots

tpl_cots

V

loopback

-

/dev/ticots

straddr.so

Funkcja clnt_create zakończona błędem zwraca wartość NULL. Jeśli do tego dojdzie, jak już wspomniano, zostanie uruchomiona procedura clnt_pcreateern>r, która wyświetla komunikat o zaistniałym błędzie (patrz tabela 9.6).

Tabela 9.6. Zestawienie Informacji o funkcji clnt_pcreateerror

Pliki włączane

<rpc/rpc.h>

Rozdział

podręcznika

3N

Prototyp

void clnt_pcreateerror(const char *s);

Zwracana

wartość

Sukces

Niepowodzenie

Czy zmienia errno

Prześlij do standardowego wyjścia błędów komunikat o błędzie powstałym podczas tworzenia RrC

Nie

1 Więcej informacji na temat pliku netconfig znajduje się w rozdziale 4 podręcznika

Komunikat o błędzie wygenerowany przez clnt_pcreateenor, który informuje, dlaczego tworzenie klienta się nie powiodło, zostanie dopisany do ciągu przekazanego jako jedyny argument clnt_pcreatenor (patrz tabela 9.7). Ciąg pobrany z argumentu funkcji i ciąg komunikatu o błędzie będą rozdzielone dwukropkiem, a cały tekst zakończony znakiem nowej linii. Aby uzyskać większą kontrolę nad komunikatami o błędach procesu, należy skorzystać z innej funkcji bibliotecznej, clnt_spcreateerror (const char *s), zwracającej kod błędu, który można wkomponować we własne komunikaty o błędach. Źródłem informacji o przyczynie błędu może być pole cf stat struktury rpc_createerr, które można odczytywać bezpośrednio.

Z programu klienta wyeliminowano prototyp funkcji print_hello, przenosząc go do pliku hello. h. W wywołaniu funkcji print_hello wykorzystana jest nowa nazwa: print_hel-lo_l. Funkq'a zwraca teraz wskaźnik na liczbę całkowitą (a nie samą liczbę całkowitą) i ma dwa argumenty (a wcześniej nie miała żadnego). Za sprawą swej konstrukcji wszystkie funkcje RPC zwracają wskaźniki. Generalnie każdy ich argument jest przekazywany przez referencję, a nie przez wartość.

Tabela 9.7. Komunikaty o błędach związanych z funkcją clnt_ereat

Numer

Stała Komunikat otrzymywany za pomocą funkcji clnt pcreateerror

Przyczyna

13

RPCJJNKNOWNHOST

Unknown host (nieznany host)

Nie można znaleźć wskazanego hosta

17

RPCJJNKNOWNPROTO

Unknown protocol (nieznany protokół)

Protokół określony argumentem nettype nie został odnaleziony albo jest błędny

19

RPC_UNKNOWNADDR

Remote seryer address unknown (nieznany adres zdalnego serwera)

Nie można rozwikłać adresu zdalnego serwera

21

RPC.NOBROADCAST

Broadcast not supported (rozsyłanie nie obsługiwane)

System nie pozwala na rozsyłanie komunikatów (wysyłanie komuni-

katów do wszystkich demonów rpcbind w sieci)

Ponieważ ta funkq'a początkowo nie miała parametrów, użyto identyfikatora filier jako szablonu wstawiania. Drugi argument print_hello_l, Client, jest wskaźnikiem do struktury klienta zwróconej przez wywołanie clnt create.

Serwer, który teraz znajduje się w tym samym pliku co hello_server. c, został pokazany w programie 9.4.

Program 9.4. Program klienta, hello_server.c

/*

*    Program-SERWER: hello_server.c

*    Ten kod będzie wykonywany przez proces mzdalny"

V

tinclude <stdio.h>

261


Wyszukiwarka

Podobne podstrony:
Komunikacja między procesami w UninieProgram 9.2. Prosty program w C wyświetlający krótki tekst /* *
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 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 Unlxle Funkcja rexec wymaga sześciu argumentów. Pierwszym jest wskaźn
Komunikacja między procesami w Unixiedo naszych badań wybierzemy tylko nieliczne. Zestawienie argume
Komunikacja między procesami w Unixle Plik hello. h utworzony przez rpcgen będzie włączany do kodu p
Komunikacja między procesami w Unixie i argv. W sekcji deklaracyjnej klienta rezerwowane jest miejsc
Komunikacja między procesami w Unixle łinclude "hello.h*    /* wygenerowany prze
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

więcej podobnych podstron