Komunikacja między procesami w Unixie
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
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.
/*
* 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
Może to być kłopotliwe, jeżeli wcześniej programista sam utworzy plik nagłówkowy o tej samej nazwie.