rpcgen - a remote procedure call (RPC) protocol compiler
rpcgen infile
rpcgen {-c|-h|-l|-m} [-o outfile] [infile]
rpcgen -s transport [ -o outfile] [infile]
The rpcgen(1) utility is a tool that generates C code to implement an RPC protocol. The input to rpcgen is a language similar to C known as Remote Procedure Call Language (RPC Language).
The rpcgen utility is normally used as in the first synopsis where it takes an input file and generates four output files. If the infile is named proto.x, then rpcgen will generate a header file in proto.h, XDR routines in proto_xdr.c, server-side stubs in proto_svc.c, and client-side stubs in proto_clnt.c.
The other synopses shown above are used when one does not want to generate all the output files, but only a particular one. Their usage is described in the USAGE section below.
The C preprocessor, cpp(1), is run on all input files before they are actually interpreted by rpcgen, so all the cpp directives are legal within an rpcgen input file. For each type of output file, rpcgen defines a special cpp symbol for use by the rpcgen programmer:
RPC_HDR | defined when compiling into header files |
RPC_XDR | defined when compiling into XDR routines |
RPC_SVC | defined when compiling into server-side stubs |
RPC_CLNT | defined when compiling into client-side stubs |
In addition, rpcgen does a little preprocessing of its own. Any line beginning with a percent sign (%) is passed directly into the output file, uninterpreted by rpcgen.
You can customize some of your XDR routines by leaving those data types undefined. For every data type that is undefined, rpcgen will assume that there exists a routine with the name xdr_ prepended to the name of the undefined type.
cpp(1)
rpcgen Programming Guide
Nesting is not supported. As a workaround, structures can be declared at top-level, and their name used inside other structures in order to achieve the same effect.
Name clashes can occur when using program definitions, since the apparent scoping does not really apply. Most of these can be avoided by giving unique names for programs, versions, procedures and types.