06

06



Komunikacja między procesami w Unixie

do naszych badań wybierzemy tylko nieliczne. Zestawienie argumentów oraz składnię rpcgen pokazano na ilustracji 9.7.

Ilustracja 9.7. Opcje linii poleceń programu rpcgen składnia: rpcgen plik_źródłowy

rpcgen [-abCLNTMl t-Dnazwa[=wartość) 1 (-i rozmiar) (-1 I-K sekundy)) (-Y ścieżka) plik_iródłowy

rpcgen [-c I -h | -1 I - m | -t I -Sc I -Ss | -Sm) [-o plik_«ynikowy] (plik_źró-dłowy)    —

rpcgen [—s typ_sieci]* [-o plik_wynikowy] [plik_źrćdłowy)

rpcgąji [-n identyfikator_sieci] * [-o plik_wynikowy] [plik_żródłowy]

opcje:

-a

-b

-c

-C

-Dnazwa[“wartość] -h

-i rozmiar -I

-K sekundy

-1

-L


-n identyfikator_sieci


-o plik_wynikowy -s typ_sieci

-Sc

-Ss

—Sm

-t

-T

-Y ścieżka


wygeneruj wszystkie pliki, łącznie z przykładowymi

tryb kompatybilności wstecznej (generuję kod dla systemu s

SunOS 4.X)

wygeneruj procedury XDR tryb ANSI C

zdefiniuj symbol (działa.jak dyrektywa Idefine) wygeneruj plik nagłówkowy

rozmiar, od którego ma być generowany kod wstawki inline generuj kod obsługi inetd w serwerze (dla systemu SunOS 4.X)

serwer kończy działanie po K sekundach braku aktywności

generuj procedury wejścia dla klienta

błędy serwera będą kierowane do syslog

generuj procedury wejścia dla serwera

generuj kod bezpieczny dla środowiska wielowątkowego

generuj taki kod serwera, który bedzie obsługiwał nazwane

identyfikatory sieci (named netid)

obsługa wielu argumentów oraz przekazywania parametrów

przez wartość

nazwa pliku wynikowego

generuj taki kod serwera, który bedzie obsługiwał nazwane typy sieci (named nettype)

generuj przykładowy kod klienta zawierający wywołania zdalnych procedur

generuj przykładowy kod serwera zawierający definicje

zdalnych procedur

generuj szablon skryptu makefile

generuj tablice rozdzielczą RPC (dispatch table)

generuj kod obsługujący tablice rozdzielcze (dispatch

tables)

ścieżka do cpp

Ćwiczenie 9-1_

Program rpcgen podejmuje próbę interpretowania jako polecenia każdej linii tekstu z pliku definicji protokołu, nie licząc standardowych komentarzy C. Jak wymusić na programie rpcgen, aby przekazał jakieś wyrażenie bez interpretowania go?

W wywołaniu kompilatora RPC została podana opcja -c, która powoduje wygenerowanie kodu zgodnego z normą ANSIC. Podczas przetwarzania pliku hello. x program rpcgen utworzy trzy pliki wynikowe: plik nagłówkowy, procedurę wejścia klienta i procedurę wejścia serwera. Znów domyślnie1 rpcgen nada plikowi nagłówkowemu tę samą nazwę, jaką ma plik z definicją protokołu, zastępując jedynie rozszerzenie . x rozszerzeniem . h. Plik procedury wejściowej klienta otrzyma nazwę hello clnt. c (jest to nazwa pliku źródłowego uzupełniona ciągiem clnt. c), a plik procedury wejściowej serwera nazwę hello_svc. c. Jeżeli domyślnie stosowana konwencja nazw wyda się zbyt restrykcyjna, wszystkie trzy pliki można wygenerować niezależnie, jeden po drugim, nadając im własne, niepowtarzalne nazwy. Aby na przykład wygenerować plik nagłówkowy o nazwie moja_nazwa, do rpcgen należy przekazać następujące parametry:

% rpcgen -C -h -o moja_nazwa hello.x

Ta sekwencja spowoduje, iż rpcgen wygeneruje plik nagłówkowy o nazwie mo ja_na-zwa. h. Podobnie można utworzyć pliki z procedurami wejścia klienta i serwera (umieszczając dodatkowo w linii poleceń odpowiednio opcje -Sc i -Ss). Szczegóły związane ze składnią przedstawiono na ilustracji 9.7.

Zawartość pliku helloJi wygenerowanego przez rpcgen pokazano na ilustracji 9.8.

Ilustracja 9.8. Plik hello.h wygenerowany przez rpcgen z pliku definiującego protokół, hel!o.x

/*

*    Proszę nie modyfikować tego pliku.

*    Został on wygenerowany przez rpcgen.

*/

łifndef _HELLO_H_RPCGEN Idefine    _HELLO_H_RPCGEN

łinclude <rpc/rpc.h>

łifdef _cplusplus

extern *C" t łendif

Idefine    DISPLAYPRG    ((unsigned    long) (0x20000001))

Idefine    DISPLAY_VER    ((unsigned    long)(l))

łif definedl_STDC ) II    defined(_cplusplus)

Idefine    print_hello    ((unsigned    long)(l))

extern int * print_hello_l(void *, CLIENT ');

extern int * print_hello_l_svc(void *, struct svc_req *);

extern int display_prg_l_freeresult(SVCXPRT *, xdrproc_t, caddr t);

łelse /* KŁR C */

Idefine    print_hello ((unsigned long)(l))

extern int * print_hello_lO;

extern int * print_hello_l_svc();

extern int display_prg_l_freeresult();

łendif /* KiR C */

łifdef _cplusplus

łendif -

łendif /* _HELLO_H_RPCGEN */

255

1

Może to być kłopotliwe, jeżeli wcześniej programista sam utworzy plik nagłówkowy o tej samej nazwie.


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 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 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