rpcgen(1) rpcgen(1)
NAME
rpcgen - Compiler für RPC-Protokolle
SYNTAX
rpcgen infile
rpcgen [-Dname[=value]] [-T] [-K secs] infile
rpcgen -c|-h|-l|-m|-t [-o outfile] infile
rpcgen -s nettype [-o outfile] infile
rpcgen -n netid [-o outfile] infile
BESCHREIBUNG
Das Kommando rpcgen generiert C-Code zur Implementierung eines RPC-
Protokolls. Als Eingabe für rpcgen dient eine Sprache ähnlich der Pro-
grammiersprache C, die sogenannte RPC-Sprache (Remote Procedure Call -
Ferner Prozeduraufruf).
rpcgen wird normalerweise wie in der ersten Syntaxzeile dargestellt
verwendet, wobei eine Eingabedatei angegeben wird und bis zu vier Aus-
gabedateien generiert werden. Hat die Eingabedatei infile beispiels-
weise den Namen proto.x, generiert rpcgen eine Include-Datei proto.h,
XDR-Routinen in protoxdr.c, Server-Stubs in protosvc.c und Client-
Stubs in protoclnt.c. Mit der Option -T wird außerdem die RPC-
Verzweigungstabelle (RPC dispatch table) in prototbl.i generiert.
Der erstellte Server-Prozeß kann sowohl über Portmonitore wie inetd
oder listen) als auch explizit gestartet werden. Wird er über einen
Portmonitor gestartet, muß der Name des Transports über die Umgebungs-
variable NLSPROVIDER angegeben werden. Wenn der mit rpcgen generierte
Server-Prozeß explizit ausgeführt wird, werden Server-Handles für alle
in der Umgebungsvariablen NETPATH angegebenen Transporte erstellt; ist
diese Variable nicht gesetzt, werden Server-Handles für alle Tran-
sportschichten der Klasse visible von der Datei /etc/netconfig
erstellt. Hinweis: Die Transporte werden zur Laufzeit und nicht wäh-
rend der Kompilierung ausgewählt. Wenn der Server-Prozeß explizit
gestartet wird, stellt er sich standardmäßig in den Hintergrund. Ein
spezielles Definitionssymbol RPCSVCFG kann verwendet werden, um den
Server-Prozeß im Vordergrund auszuführen.
Die zweite Syntaxzeile enthält bestimmte Funktionen, über die komple-
xere RPC-Server-Prozesse erstellt werden können. Zu diesen Funktionen
gehören vom Benutzer bereitgestellte #define-Anweisungen und RPC-
Verzweigungstabellen. Die RPC-Verzweigungstabelle enthält u. a. die
folgenden Einträge:
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
rpcgen(1) rpcgen(1)
- Zeiger auf die Service-Routine, die dieser Prozedur entspricht
- Einen Zeiger auf die Ein- und Ausgabeargumente
- Die Größe der Ein- und Ausgabeargumente
Ein Server kann die Verzweigungstabelle verwenden, um den Client zu
identifizieren und dann die Service-Routine auszuführen. Eine Client-
Bibliothek kann dieser Tabelle Einzelheiten zur Speicherverwaltung und
XDR-Datenkonvertierung entnehmen.
Die letzten drei oben gezeigten Syntaxzeilen werden verwendet, wenn
nicht alle, sondern nur bestimmte Ausgabedateien generiert werden sol-
len. Einige Beispiele zur Verwendung werden im Abschnitt BEISPIELE
weiter unten beschrieben. Wenn rpcgen mit der Option -s ausgeführt
wird, werden Server-Prozesse nur für diese bestimmte Transportklasse
erstellt. Mit der Option -n wird ein Server-Prozeß für den durch netid
angegebene Transport erstellt. Wird keine Eingabedatei infile angege-
ben, verwendet rpcgen die Standard-Eingabe.
Die Eingabedatei wird zunächst vom C-Präprozessor cc -E [siehe cc(1)]
verarbeitet, bevor sie von rpcgen interpretiert wird. Für jeden Ausga-
bedateityp definiert rpcgen ein spezielles Präprozessorsymbol, das vom
rpcgen-Programmierer verwendet werden kann:
RPCHDR wird bei der Kompilierung in Include-Dateien definiert
RPCXDR wird bei der Kompilierung in XDR-Routinen definiert
RPCSVC wird bei der Kompilierung in Server-Stubs definiert
RPCCLNT wird bei der Kompilierung in Client-Stubs definiert
RPCTBL wird bei der Kompilierung in RPC-Verzweigungstabellen
definiert
Jede Zeile, die mit "%" beginnt, wird direkt in die Ausgabedatei über-
tragen, ohne zuvor von rpcgen interpretiert zu werden.
rpcgen geht davon aus, daß für jeden Datentyp, auf den in der Eingabe-
datei infile verwiesen wird, eine Routine existiert, deren Name aus
der Zeichenkette xdr gefolgt von dem Namen des Datentyps besteht. Ist
diese Routine nicht in der RPC/XDR-Bibliothek enthalten, muß sie zur
Verfügung gestellt werden. Durch Angabe eines nicht definierten Daten-
typs können XDR-Routinen angepaßt werden.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
rpcgen(1) rpcgen(1)
OPTIONEN
-c XDR-Routinen erzeugen.
-Dname[=value]
Ein Symbol name definieren. Dies entspricht der Anweisung #define
in der Quelle. Wird kein Wert für value angegeben, wird value als
1 definiert. Diese Option kann mehrere Male angegeben werden.
-h C-Datendefinitionen (eine Include-Datei) erzeugen. Die Option -T
kann mit anderen Optionen kombiniert werden, um eine Include-
Datei zur Unterstützung der RPC-Verzweigungstabellen zu erstel-
len.
-K secs
Standardmäßig warten Services, die mit rpcgen erstellt und durch
einen Portmonitor gestartet werden, nach der Ausführung eines
Request noch 120 Sekunden, bis sie beendet werden. Dieses Inter-
vall kann mit der Option -K geändert werden. Für die Erstellung
eines Server-Prozesses, der sofort nach Ausführung eines Request
beendet wird, kann -K 0 verwendet werden. Zur Erstellung eines
Server-Prozesses, der nicht beendet werden soll, lautet das ent-
sprechende Argument -K -1.
Bei der Überwachung für einen Server-Prozeß erstellen einige
Portmonitore, wie zum Beispiel listen(1M), immer einen neuen Pro-
zeß als Antwort auf einen Service-Request. Ist bekannt, daß ein
Server-Prozeß mit einem derartigen Portmonitor verwendet wird,
muß der Server-Prozeß direkt nach der Ausführung beendet werden.
Verwenden Sie für diese Server-Prozesse rpcgen mit -K -1.
-l Client-Stubs erzeugen.
-m Server-Stubs erzeugen, jedoch ohne eine main-Routine zu generie-
ren. Diese Option bietet sich für Rückruf-Routinen (callback rou-
tines) sowie für Benutzer an, die für die Initialisierung eine
eigene main-Routine schreiben müssen.
-n netid
In Server-Stubs für die durch netid angegebene Transportschicht
erzeugen. Die netconfig-Datei muß einen Eintrag für netid enthal-
ten. Diese Option kann mehrere Male angegeben werden, wenn zum
Beispiel ein Server-Prozeß für mehrere Transporte erzeugt werden
soll.
-o outfile
Den Namen der Ausgabedatei angeben. Wird kein Name angegeben,
wird die Standard-Ausgabe verwendet. (Nur bei -c, -h, -l, -m, -n,
-s und -t.)
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
rpcgen(1) rpcgen(1)
-s nettype
Server-Stubs für alle Transporte der Klasse nettype erzeugen.
Folgende Klassen werden unterstützt: netpath, visible, circuitn,
circuitv, datagramn, datagramv, tcp und udp [die Bedeutungen
dieser Klassen werden in rpc(3N) beschrieben]. Diese Option kann
mehrere Male angegeben werden. Hinweis: Die Transporte werden zur
Laufzeit und nicht während der Kompilierung ausgewählt.
-t Eine RPC-Verzweigungstabelle erzeugen.
-T Den Code zur Unterstützung der RPC-Verzweigungstabellen generie-
ren.
Die Optionen -c, -h, -l, -m, -s und -t werden ausschließlich zur Gene-
rierung eines bestimmten Dateityps verwendet. Bei den Optionen -D und
-T hingegen handelt es sich um globale Optionen, die zusammen mit
anderen Optionen verwendet werden können.
HINWEISE
Die RPC-Sprache unterstützt kein Verschachteln von Strukturen. Um die-
ses Problem zu umgehen, können Strukturen auf höchster Ebene dekla-
riert und ihre Namen dann innerhalb anderer Strukturen verwendet wer-
den. Auf diese Weise wird derselbe Effekt wie beim Verschachteln
erreicht.
Bei der Verwendung von Programmdefinitionen können Namenskollisionen
auftreten, da der Gültigkeitsbereich nicht tatsächlich zutrifft. Diese
Kollisionen können zum größten Teil vermieden werden, wenn für Pro-
gramme, Versionen, Prozeduren und Typen eindeutige Namen vergeben wer-
den.
Der mit der Option -n generierte Server-Code bezieht sich auf die
durch netid angegebene Transportschicht und ist daher extrem abhängig
von der jeweiligen Umgebung.
BEISPIELE
Im folgenden Beispiel werden die fünf Dateien prot.h, protclnt.c,
protsvc.c, protxdr.c und prottbl.i generiert:
$ rpcgen -T prot.x
Im folgenden Beispiel werden die C-Datendefinitionen (Include-Datei)
an die Standard-Ausgabe gesendet:
$ rpcgen -h prot.x
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
rpcgen(1) rpcgen(1)
Soll die Testversion der Server-Stubs -DTEST für alle Transporte der
Klasse datagramn an die Standard-Ausgabe gesendet werden, geben Sie
folgendes ein:
$ rpcgen -s datagramn -DTEST prot.x
Sollen die Server-Stubs für den durch netid angegebenen Transport der
Klasse tcp erstellt werden, geben Sie folgendes ein:
$ rpcgen -n tcp -o protsvc.c prot.x
SIEHE AUCH
cc(1).
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98