Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026