私の/usr/include
には、.x
など、/usr/include/rpcsvc/rquota.x
ファイル拡張子が付いたファイルがいくつか含まれています。
それらはCソースのように見えますが(file /usr/include/rpcsvc/rquota.x
を実行するとC source, ASCII text
が生成されます)、有効なCではありません(例:program
およびversion
はキーワードと思われます)。
彼らは正確には何ですか?短い拡張子を考えるとグーグルするのは難しく、一部のウェブサイトは間違っている/不完全です(例 Wikipedia は「古いDirectXファイル」と言います)。
これらは SunRPC ベースのプロトコル(RPCはリモートプロシージャコールの略)の説明です。通常、各ファイルには、これらのRPCで使用されるデータ構造と、それらを実装するプログラムが記述されています。たとえば、_yppasswd.x
_はイエローページのパスワード更新プロトコルを表し、比較的理解しやすいものです。
_program YPPASSWDPROG {
version YPPASSWDVERS {
/*
* Update my passwd entry
*/
int
YPPASSWDPROC_UPDATE(yppasswd) = 1;
} = 1;
} = 100009;
struct passwd {
string pw_name<>; /* username */
string pw_passwd<>; /* encrypted password */
int pw_uid; /* user id */
int pw_gid; /* group id */
string pw_gecos<>; /* in real life name */
string pw_dir<>; /* home directory */
string pw_Shell<>; /* default Shell */
};
struct yppasswd {
string oldpass<>; /* unencrypted old password */
passwd newpw; /* new passwd entry */
};
_
これは、RPC YPパスワード更新手順を宣言します。これは、yppasswd
構造体を引数として取り、int
を返します。このファイルには、使用するyppasswd
構造とともに、passwd
構造自体も記述されています。
これらのファイルは通常、rpcgen
とともに使用されます。これにより、スタブサーバーとクライアントコードが生成され、プロトコルやRPCクライアント用のRPCサーバーを実装するために使用できます。クライアントとサーバーのサンプルコードを生成することもできます。
Kusalananda で示されているように、 rpcgen(1)
のマンページに詳細情報があります。
Linuxシステムのrpcgen
マニュアルのスニペット:
rpcgen is a tool that generates C code to implement an RPC protocol. The
input to rpcgen is a language similar to C known as RPC Language (Remote
Procedure Call Language).
rpcgen is normally used as in the first synopsis where it takes an input
file and generates up to 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.
見る man rpcgen
。