名 前
rpc − 遠 隔 手 続 き 呼 び 出 し (RPC)の た め の ラ イ ブ ラ リ ル ー テ ィ ン
書 式 と 説 明
こ れ ら の ル ー テ ィ ン は C プ ロ グ ラ ム で ネ ッ ト ワ ー ク を 通 し て 他 の マ シ ン に ア ク セ ス す る プ ロ シ ー ジ ャ ー を 作 成 す る こ と を 可 能 に す る 。 最 初 に ク ラ イ ア ン ト は デ ー タ パ ケ ッ ト を サ ー バ に 送 る た め に プ ロ シ ー ジ ャ ー を 呼 び 出 す 。 サ ー バ は パ ケ ッ ト を 受 け 取 る と 、 配 分 ル ー チ ン を 呼 び 出 し て 要 求 さ れ た サ ー ビ ス に 実 行 し 、 返 答 を 送 り 返 す 。 最 後 に プ ロ シ ー ジ ャ ー コ ー ル は ク ラ イ ア ン ト へ と 戻 る 。 こ れ ら の ル ー テ ィ ン を 使 用 す る に は 、 ヘ ッ ダ ー フ ァ イ ル <rpc/rpc.h> を イ ン ク ル ー ド す る こ と 。 下 記 の プ ロ ト タ イ プ で は 次 の 型 を 使 用 し て い る 。
typedef int bool_t;
typedef bool_t (*xdrproc_t) (XDR *, void *, ...);
typedef
bool_t (*resultproc_t) (caddr_t
resp,
struct sockaddr_in *raddr);
型AUTH, CLIENT, SVCXPRT,
XDR の 宣 言 に つ
い て は ヘ ッ ダ
ー フ ァ イ ル を
参 照 。
void auth_destroy(AUTH *auth); こ の マ ク ロ は auth に 関 連 付 け ら れ た 認 証 情 報 を 破 壊 す る 。 破 壊 は 通 常 は 私 的 な デ ー タ 構 造 の 破 棄 を 含 ん で い る 。 auth_destroy() を 呼 び 出 し た 後 に auth を 使 用 す る こ と は 未 定 義 で あ る 。
AUTH *authnone_create(void); 各 リ モ ー ト プ ロ シ ー ジ ャ ー コ ー ル で 使 用 で き な い 仮 の 認 証 情 報 と し て 渡 さ れ る RPC 認 証 ハ ン ド ル を 作 成 し て 返 す 。 こ れ は RPC で 使 用 さ れ る デ フ ォ ル ト の 認 証 で あ る 。
AUTH
*authunix_create(char *host, int
uid, int gid,
int len, int *aup_gids);
認 証 情 報 を 含
ん だ RPC 認 証 ハ ン
ド ル を 作 成 し
て 返 す 。 host パ
ラ メ ー タ ー は
情 報 が 作 成 さ
れ た マ シ ン の
名 前 で あ る 。
uid は そ の ユ ー
ザ ー の ユ ー ザ
ー ID 、 gid は
そ の ユ ー ザ ー
の 現 在 の グ ル
ー プ ID で あ
る 。 len と aup_gids
は そ の ユ ー ザ
ー が 所 属 す る
グ ル ー プ の 配
列 を 参 照 し て
い る 。 他 の ユ
ー ザ ー に な り
す ま す こ と は
簡 単 で あ る 。
AUTH *authunix_create_default(void); 適 切 な パ ラ メ ー タ ー で authunix_create() を 呼 び 出 す 。
int
callrpc(char *host, unsigned long
prognum,
unsigned long versnum, unsigned long
procnum,
xdrproc_t inproc, char *in,
xdrproc_t outproc, char
*out); マ シ ン
host 上 で prognum,
versnum, procnum に 関 連
付 け ら れ た リ
モ ー ト プ ロ シ
ー ジ ャ ー を 呼
び 出 す 。 パ ラ
メ ー タ ー in は
プ ロ シ ー ジ ャ
ー の 引 き 数 の
ア ド レ ス で あ
り out は 結 果 を
格 納 す る ア ド
レ ス で あ る 。
inproc は プ ロ シ ー
ジ ャ ー の パ ラ
メ ー タ ー を エ
ン コ ー ド す る
の に 使 用 さ れ
、 outproc は 結 果 を
デ コ ー ド す る
の に 使 用 さ れ
る 。 こ の ル ー
テ ィ ン は 成 功
し た 場 合 に は
ゼ ロ を 返 す 。
失 敗 し た 場 合
に は enum clnt_stat を 整
数 に キ ャ ス ト
し た 値 を 返 す
。 clnt_perrno() ル ー テ
ィ ン が 失 敗 の
状 態 を メ ッ セ
ー ジ に 変 換 す
る の に 使 用 で
き る 。 警 告 : こ
の ル ー テ ィ ン
で リ モ ー ト プ
ロ シ ー ジ ャ ー
を 呼 び 出 す と
通 信 に は UDP/IP が 使
用 さ れ る 。 こ
の 際 の 制 限 に
つ い て は clntudp_create()
を 参 照 す る こ
と 。 こ の ル ー
テ ィ ン を 使 用
し て 認 証 や 時
間 切 れ の 制 御
を す る こ と は
で き な い 。
enum
clnt_stat clnt_broadcast(unsigned long
prognum,
unsigned long versnum, unsigned long
procnum,
xdrproc_t inproc, char *in,
xdrproc_t outproc, char *out,
resultproc_t eachresult);
callrpc() と 同 様 で あ る が 、 メ ッ セ ー ジ が ロ ー カ ル の ブ ロ ー ド キ ャ ス ト ネ ッ ト ワ ー ク 全 体 へ と ブ ロ ー ド キ ャ ス ト さ れ る 点 が 異 っ て い る 。 回 答 を 受 け 取 る 度 に こ の ル ー テ ィ ン は 以 下 の 形 式 の eachresult() を 呼 び 出 す 。
eachresult(char *out, struct sockaddr_in *addr); こ こ で out は clnt_broadcast() に 渡 さ れ る out と 同 じ で あ る が 、 リ モ ー ト プ ロ シ ー ジ ャ ー か ら の 出 力 が デ コ ー ド さ れ て い る 点 の み が 異 っ て い る 。 addr は 結 果 を 送 っ て 来 た マ シ ン の ア ド レ ス を 指 し て い る 。 eachresult() が ゼ ロ を 返 し た 場 合 、 clnt_broadcast() は さ ら な る 回 答 を 待 つ 。 そ う で な け れ ば 適 切 な 状 態 で 終 了 す る 。 警 告 : ブ ロ ー ド キ ャ ス ト ソ ケ ッ ト は デ ー タ リ ン ク 層 の 最 大 転 送 単 位 に 制 限 さ れ て い る 。 イ ー サ ネ ッ ト の 場 合 、 最 大 値 は 1500 バ イ ト で あ る 。
enum
clnt_stat clnt_call(CLIENT *clnt, unsigned
long procnum,
xdrproc_t inproc, char *in,
xdrproc_t outproc, char *out,
struct timeval tout); こ の
マ ク ロ は ク ラ
イ ア ン ト ハ ン
ド ル clnt に 関 連
付 け ら れ た procnum
リ モ ー ト プ ロ
シ ー ジ ャ ー を
呼 び 出 す 。 ク
ラ イ ア ン ト ハ
ン ド ル は clnt_create()
の よ う な RPC
ク ラ イ ア ン ト
作 成 ル ー テ ィ
ン に よ っ て 得
ら れ る 。 パ タ
メ ー タ in は プ
ロ シ ー ジ ャ ー
の 引 き 数 の ア
ド レ ス で あ る
。 out は プ ロ シ
ー ジ ャ ー の 返
り 値 を 格 納 す
る ア ド レ ス で
あ る 。 inproc は プ
ロ シ ー ジ ャ ー
の パ ラ メ ー タ
ー を エ ン コ ー
ド す る の に 使
用 さ れ る 。 outproc
は プ ロ シ ー ジ
ャ ー の 返 り 値
を デ コ ー ド す
る の に 使 用 さ
れ る 。 tout は 結
果 が 返 さ れ る
の を 待 つ 時 間
で あ る 。
clnt_destroy(CLIENT *clnt); こ の マ ク ロ は ク ラ イ ア ン ト の RPC ハ ン ド ル を 破 壊 す る 。 破 壊 に は 通 常 は clnt 自 身 も 含 め て 私 的 な デ ー タ 構 造 体 の 破 棄 が 含 ま れ て い る 。 clnt_destroy() の 呼 び 出 し の 後 に clnt を 使 用 す る こ と は 未 定 義 で あ る 。 RPC ラ イ ブ ラ リ が 関 連 す る ソ ケ ッ ト を オ ー プ ン し た 場 合 に は 、 そ れ も 閉 じ ら れ る 。 そ れ 以 外 の 場 合 に は ソ ケ ッ ト は オ ー プ ン さ れ た ま ま で あ る 。
CLIENT
*clnt_create(char *host, unsigned long
prog,
unsigned long vers, char
*proto); 一 般 的
な ク ラ イ ア ン
ト の 作 成 ル ー
テ ィ ン で あ る
。 host は サ ー バ
の あ る リ モ ー
ト ホ ス ト の 名
前 を 指 定 す る
。 proto ど の よ う
な 通 信 プ ロ ト
コ ル を 使 用 す
る か を 指 定 す
る 。 現 在 こ こ
に 使 用 で き る
値 は “udp” と
“tcp” で あ る 。
デ フ ォ ル ト の
時 間 切 れ が 設
定 さ れ る が 、
clnt_control() を 使 用 し
て 変 更 可 能 で
あ る 。 警 告 : UDP を
使 用 し た 場 合
に は 欠 点 が あ
る 。 UDP に 基 づ い
た RPC メ ッ セ ー ジ
は 最 大 で も 8 KByte
の エ ン コ ー ド
デ ー タ し か 保
持 す る こ と が
で き な い た め
、 大 き な 引 き
数 や 巨 大 な 結
果 を 取 る プ ロ
シ ー ジ ャ ー に
は 使 用 す る こ
と が で き な い
。
bool_t clnt_control(CLIENT *cl, int req, char *info); こ の マ ク ロ は 各 種 ク ラ イ ア ン ト に つ い て 情 報 を 変 更 し た り 、 取 得 し た り す る の に 使 用 す る 。 req は 操 作 の 種 類 を 指 定 す る 。 info は 情 報 へ の ポ イ ン タ ー で あ る 。 UDP と TCP ど ち ら の 場 合 も 使 用 可 能 な req の 値 と 、 そ の 引 き 数 の 型 、 お よ び そ の 内 容 は 以 下 の 通 り で あ る :
CLSET_TIMEOUT
struct timeval // 時 間 切 れ
を 設 定 す る
CLGET_TIMEOUT struct timeval // 時 間
切 れ を 取 得 す
る 注 意 : clnt_control() を
使 用 し て 時 間
切 れ を 設 定 し
た 場 合 に は そ
れ 以 後 は clnt_call()
に 渡 さ れ る 時
間 切 れ パ ラ メ
ー タ ー は 全 て
無 視 さ れ る 。
CLGET_SERVER_ADDR struct sockaddr_in // サ ー バ ア ド レ ス を 取 得 す る 以 下 の 操 作 は UDP の 場 合 に の み 有 効 で あ る :
CLSET_RETRY_TIMEOUT
struct timeval // 再 送 間 隔
を 設 定 す る
CLGET_RETRY_TIMEOUT struct timeval // 再
送 間 隔 を 取 得
す る 再 送 間 隔
は 次 に 要 求 を
再 送 す る 前 に
"UDP RPC" が サ ー バ
の 回 答 を 待 つ
時 間 で あ る 。
clnt_freeres(CLIENT * clnt, xdrproc_t outproc, char *out); こ の マ ク ロ は RPC 呼 び 出 し の 結 果 の デ コ ー ド の 際 に RPC/XDR シ ス テ ム に よ っ て 割 当 て ら れ た デ ー タ を 解 放 す る 。 パ ラ メ ー タ ー out は 結 果 の ア ド レ ス で あ る 。 outproc は 結 果 を 記 述 し て い る XDR ル ー テ ィ ン で あ る 。 こ の ル ー テ ィ ン は 結 果 の 解 放 に 成 功 し た 場 合 に は 1 を 返 す 。 失 敗 し た 場 合 に は ゼ ロ を 返 す 。
void clnt_geterr(CLIENT *clnt, struct rpc_err *errp); こ の マ ク ロ は ク ラ イ ア ン ト ハ ン ド ル の エ ラ ー 構 造 体 を errp ア ド レ ス で 指 定 さ れ た 構 造 体 へ コ ピ ー す る 。
void clnt_pcreateerror(char *s); 標 準 エ ラ ー 出 力 に 、 な ぜ ク ラ イ ア ン ト RPC ハ ン ド ル の 作 成 が で き な か っ た か に つ い て の メ ッ セ ー ジ を 表 示 す る 。 メ ッ セ ー ジ の 前 に 文 字 列 s と コ ロ ン (:)が 表 示 さ れ る 。 clnt_create(), clntraw_create(), clnttcp_create(), clntudp_create() の 呼 び 出 し が 失 敗 し た 時 に 使 用 す る こ と 。
void clnt_perrno(enum clnt_stat stat); 標 準 エ ラ ー 出 力 に stat に よ っ て 指 示 さ れ る エ ラ ー 状 態 に 対 応 す る メ ッ セ ー ジ を 表 示 す る 。 callrpc() の 後 に 使 用 す る こ と 。
clnt_perror(CLIENT *clnt, char *s); 標 準 エ ラ ー 出 力 に 、 な ぜ RPC 呼 び 出 し が 失 敗 し た か に つ い て の メ ッ セ ー ジ を 表 示 す る 。 clnt は コ ー ル に 使 用 し た ハ ン ド ル で あ る 。 メ ッ セ ー ジ の 前 に 文 字 列 s と コ ロ ン (:)が 表 示 さ れ る 。 clnt_call() が 失 敗 し た 後 に 使 用 す る こ と 。
char *clnt_spcreateerror(char *s);
clnt_pcreateerror() と 同 様 で あ る が 、 標 準 エ ラ ー 出 力 へ 表 示 す る か わ り に 文 字 列 を 返 す 点 が 異 っ て い る 。 バ グ : 静 的 な 領 域 へ の ポ イ ン タ ー を 返 す た め 、 呼 び 出 し ご と に 上 書 き さ れ る 。
char *clnt_sperrno(enum clnt_stat stat);
clnt_perrno() と 同 じ 引 き 数 を 取 る が 、 な ぜ RPC 呼 び 出 し が 失 敗 し た か に つ い て の メ ッ セ ー ジ を 標 準 エ ラ ー 出 力 に 表 示 す る か わ り に 、 メ ッ セ ー ジ を 格 納 し て い る 文 字 列 へ の ポ イ ン タ ー を 返 す 。 文 字 列 は NEWLINE(改 行 ) で 終 っ て い る 。
clnt_sperrno() は プ ロ グ ラ ム が 標 準 エ ラ ー 出 力 を 持 っ て い な い 場 合 (プ ロ グ ラ ム が サ ー バ と し て 走 っ て い る 場 合 に は よ く あ り え る )や 、 プ ロ グ ラ マ ー が メ ッ セ ー ジ を printf(3) で 出 力 す る こ と を 望 ま な い 場 合 や 、 メ ッ セ ー ジ の 形 式 が clnt_perrno() が サ ポ ー ト す る も の と は 異 っ て い る 場 合 な ど に clnt_perrno() の か わ り に 使 用 さ れ る 。 注 意 : clnt_sperror() や clnt_spcreaterror() と は 違 っ て clnt_sperrno() は 静 的 デ ー タ へ の ポ イ ン タ ー を 返 す 。 し か し 呼 び 出 し ご と に 上 書 き さ れ る こ と は な い 。
char *clnt_sperror(CLIENT *rpch, char *s);
clnt_perror() と 同 様 で あ る が 、 標 準 エ ラ ー 出 力 に 表 示 す る 代 り に (clnt_sperrno() の よ う に ) 文 字 列 へ の ポ イ ン タ ー を 返 す 点 が 異 っ て い る 。 バ グ : 静 的 な 領 域 へ の ポ イ ン タ ー を 返 す た め 、 呼 び 出 し ご と に 上 書 き さ れ る 。
CLIENT *clntraw_create(unsigned long prognum, unsigned long versnum); こ の ル ー テ ィ ン は リ モ ー ト プ ロ グ ラ ム prognum、 バ ー ジ ョ ン versnum の た め の 擬 似 RPC ク ラ イ ア ン ト を 作 成 す る 。 メ ッ セ ー ジ を サ ー ビ ス に 渡 す た め に 使 用 す る 通 信 は 実 際 に は そ の プ ロ セ ス の ア ド レ ス 空 間 に あ る バ ッ フ ァ ー で あ る 。 そ れ で 、 対 応 す る RPC サ ー バ が 同 じ ア ド レ ス 空 間 の 中 に い な け れ ば な ら な い 。 svcraw_create() を 参 照 す る こ と 。 こ れ に よ り RPC の シ ミ ュ レ ー シ ョ ン や 、 カ ー ネ ル イ ン タ ー フ ェ ー ス に 影 響 さ れ ず に 応 答 時 間 な ど の RPC オ ー バ ヘ ッ ド の 獲 得 が で き る 。 失 敗 し た 場 合 に は こ の ル ー テ ィ ン は NULL を 返 す 。
CLIENT
*clnttcp_create(struct sockaddr_in *addr,
unsigned long prognum, unsigned long
versnum,
int *sockp, unsigned int sendsz,
unsigned int recvsz); こ の
ル ー テ ィ ン は
リ モ ー ト プ ロ
グ ラ ム prognum、 バ
ー ジ ョ ン versnum の
た め の RPC ク ラ イ
ア ン ト を 作 成
す る 。 ク ラ イ
ア ン ト は 通 信
に TCP/IP を 使 用 す る
。 リ モ ー ト プ
ロ グ ラ ム は イ
ン タ ー ネ ッ ト
ア ド レ ス の *addr
に あ る 。
addr−>sin_port が ゼ ロ
な ら ば 、 実 際
に リ モ ー ト プ
ロ グ ラ ム が listen し
て い る ポ ー ト
が 設 定 さ れ る
。 (こ の 情 報 の
た め に リ モ ー
ト の portmap サ ー ビ
ス が 利 用 さ れ
る 。 ) パ ラ メ ー
タ ー sockp は ソ ケ
ッ ト で あ る 。
も し こ れ が
RPC_ANYSOCK に 設 定 さ
れ て い る 場 合
は 、 こ の ル ー
テ ィ ン が 新 し
い ソ ケ ッ ト を
オ ー プ ン し て
sockp に 設 定 す る
。 TCP に 基 づ い た
RPC は バ ッ フ ァ ー
さ れ た I/O を 使 用
す る た め 、 ユ
ー ザ ー は パ ラ
メ ー タ ー sendsz と
recvsz を 使 用 し て
送 信 バ ッ フ ァ
ー と 受 信 バ ッ
フ ァ ー の サ イ
ズ を 指 定 す る
こ と が で き る
。 ゼ ロ を 指 定
し た 場 合 に は
適 切 な デ フ ォ
ル ト が 選 択 さ
れ る 。 こ の ル
ー テ ィ ン は 失
敗 し た 場 合 は NULL
を 返 す 。
CLIENT
*clntudp_create(struct sockaddr_in *addr,
unsigned long prognum, unsigned long
versnum,
struct timeval wait, int
*sockp); こ の ル
ー テ ィ ン は リ
モ ー ト プ ロ グ
ラ ム prognum、 バ ー
ジ ョ ン versnum の た
め の RPC ク ラ イ ア
ン ト を 作 成 す
る 。 ク ラ イ ア
ン ト は 通 信 に UDP/IP
を 使 用 す る 。
リ モ ー ト プ ロ
グ ラ ム は イ ン
タ ー ネ ッ ト ア
ド レ ス の *addr に
あ る 。 addr−>sin_port
が ゼ ロ な ら ば
、 実 際 に リ モ
ー ト プ ロ グ ラ
ム が listen し て い る
ポ ー ト が 設 定
さ れ る 。 (こ の
情 報 の た め に
リ モ ー ト の portmap
サ ー ビ ス が 利
用 さ れ る 。 ) パ
ラ メ ー タ ー sockp
は ソ ケ ッ ト で
あ る 。 も し こ
れ が RPC_ANYSOCK に 設
定 さ れ て い る
場 合 は 、 こ の
ル ー テ ィ ン が
新 し い ソ ケ ッ
ト を オ ー プ ン
し て sockp に 設 定
す る 。 UDP 通 信 は
回 答 が あ る か
、 時 間 切 れ が
起 こ る ま で wait
間 隔 で 呼 び 出
し メ ッ セ ー ジ
を 再 送 す る 。
時 間 切 れ が 起
こ る ま で の 合
計 時 間 は clnt_call()
で 指 定 す る 。
警 告 : UDP に 基 づ い
た RPC メ ッ セ ー ジ
は 最 大 で も 8 Kbyte
ま で の エ ン コ
ー ド さ れ た デ
ー タ し か 保 持
で き な い た め
、 こ の 通 信 は
大 き な 引 き 数
や 巨 大 な 結 果
を 取 る プ ロ シ
ー ジ ャ ー に は
使 用 で き な い
。
CLIENT
*clntudp_bufcreate(struct sockaddr_in *addr,
unsigned long prognum, unsigned long
versnum,
struct timeval wait, int *sockp,
unsigned int sendsize, unsigned int
recosize); こ の ル ー
テ ィ ン は リ モ
ー ト プ ロ グ ラ
ム prognum、 バ ー ジ
ョ ン versnum の た め
の RPC ク ラ イ ア ン
ト を 作 成 す る
。 ク ラ イ ア ン
ト は 通 信 に UDP/IP を
使 用 す る 。 リ
モ ー ト プ ロ グ
ラ ム は イ ン タ
ー ネ ッ ト ア ド
レ ス の *addr に あ
る 。 addr−>sin_port が
ゼ ロ な ら ば 、
実 際 に リ モ ー
ト プ ロ グ ラ ム
が listen し て い る ポ
ー ト が 設 定 さ
れ る 。 (こ の 情
報 の た め に リ
モ ー ト の portmap サ
ー ビ ス が 利 用
さ れ る 。 ) パ ラ
メ ー タ ー sockp は
ソ ケ ッ ト で あ
る 。 も し こ れ
が RPC_ANYSOCK に 設 定
さ れ て い る 場
合 は 、 こ の ル
ー テ ィ ン が 新
し い ソ ケ ッ ト
を オ ー プ ン し
て sockp に 設 定 す
る 。 UDP 通 信 は 回
答 が あ る か 、
時 間 切 れ が 起
こ る ま で wait 間
隔 で 呼 び 出 し
メ ッ セ ー ジ を
再 送 す る 。 時
間 切 れ が 起 こ
る ま で の 合 計
時 間 は clnt_call() で
指 定 す る 。 こ
れ を 使 用 す る
と UDP に 基 づ い た
RPC メ ッ セ ー ジ に
お い て 送 信 パ
ケ ッ ト や 受 信
パ ケ ッ ト の 最
大 サ イ ズ を 指
定 す る こ と が
可 能 に な る 。
void get_myaddress(struct sockaddr_in *addr); こ の マ シ ン の IP ア ド レ ス を *addr に 格 納 す る 。 /etc/hosts を 扱 う ラ イ ブ ラ リ ル ー テ ィ ン は 使 用 し な い 。 ポ ー ト 番 号 は 常 に htons(PMAPPORT) に 設 定 さ れ る 。
struct pmaplist *pmap_getmaps(struct sockaddr_in *addr);
portmap サ ー ビ ス の た め の ユ ー ザ ー イ ン タ ー フ ェ ー ス で あ り 、 IP ア ド レ ス *addr に あ る ホ ス ト の 現 在 の RPC プ ロ グ ラ ム か ら ポ ー ト 番 号 へ の マ ッ ピ ン グ の 一 覧 を 返 す 。 こ の ル ー テ ィ ン が NULL を 返 す 場 合 も あ る 。 ’rpcinfo −p’ コ マ ン ド は こ の ル ー テ ィ ン を 使 用 し て い る 。
unsigned
short pmap_getport(struct sockaddr_in *addr,
unsigned long prognum, unsigned long
versnum,
unsigned int protocol);
portmap サ ー ビ ス の た め の ユ ー ザ ー イ ン タ ー フ ェ ー ス で 、 プ ロ グ ラ ム 番 号 prognum、 バ ー ジ ョ ン versnum、 関 連 付 け ら れ た 通 信 プ ロ ト コ ル protocol を サ ポ ー ト す る サ ー ビ ス が 待 っ て い る ポ ー ト 番 号 を 返 す 。 protocol の 値 は ほ と ん ど の 場 合 IPPROTO_UDP か IPPROTO_TCP で あ る 。 返 り 値 ゼ ロ は マ ッ ピ ン グ が 存 在 し な い か 、 RPC シ ス テ ム が リ モ ー ト の portmap サ ー ビ ス の 参 照 に 失 敗 し た こ と を 意 味 す る 。 後 者 の 場 合 は 大 域 変 数 rpc_createerr が RPC 状 態 を 保 持 し て い る 。
enum
clnt_stat pmap_rmtcall(struct sockaddr_in
*addr,
unsigned long prognum, unsigned long
versnum,
unsigned long procnum,
xdrproc_t inproc, char *in,
xdrproc_t outproc, char *out,
struct timeval tout, unsigned long
*portp);
portmap サ ー ビ ス の た め の ユ ー ザ ー イ ン タ ー フ ェ ー ス で 、 IP ア ド レ ス *addr の ホ ス ト の portmap を 参 照 し て 、 RPC 呼 び 出 し を 生 成 し 、 そ の ホ ス ト 上 の プ ロ シ ー ジ ャ ー を 呼 び 出 す 。 パ ラ メ ー タ ー *portp は プ ロ シ ー ジ ャ ー が 成 功 し た 場 合 に は プ ロ グ ラ ム の ポ ー ト 番 号 に 修 正 さ れ る 。 他 の パ ラ メ ー タ ー の 定 義 に つ い て は callrpc() や clnt_call() で 説 明 し て あ る 。 こ の プ ロ シ ー ジ ャ ー は “ping” の み に 使 用 す べ き で あ る 。 clnt_broadcast() も 参 照 す る こ と 。
bool_t
pmap_set(unsigned long prognum, unsigned
long versnum,
unsigned int protocol, unsigned short
port);
portmap サ ー ビ ス の た め の ユ ー ザ ー イ ン タ ー フ ェ ー ス で 、 [prognum,versnum,protocol] の 組 み 合 わ せ と port と の 間 の マ ッ ピ ン グ を 、 そ の マ シ ン 上 の portmap サ ー ビ ス に 登 録 す る 。 protocol は ほ と ん ど の 場 合 IPPROTO_UDP か IPPROTO_TCP の ど ち ら か で あ る 。 こ の ル ー テ ィ ン は 成 功 し た 場 合 に は 1 を 返 す 。 失 敗 し た 場 合 に は ゼ ロ を 返 す 。 svc_register() に よ っ て 自 動 的 に 実 行 さ れ る 。
bool_t pmap_unset(unsigned long prognum, unsigned long versnum);
portmap サ ー ビ ス の た め の ユ ー ザ ー イ ン タ ー フ ェ ー ス で 、 [prognum,versnum,*] の 組 み 合 わ せ と ports の 間 の マ ッ ピ ン グ を そ の マ シ ン 上 の portmap サ ー ビ ス か ら 削 除 す る 。 こ の ル ー テ ィ ン は 成 功 し た 場 合 は 1 を 返 す 。 失 敗 し た 場 合 に は 0 を 返 す 。
int
registerrpc(unsigned long prognum, unsigned
long versnum,
unsigned long procnum, char
*(*procname)(char *),
xdrproc_t inproc, xdrproc_t
outproc);
RPC サ ー ビ ス パ ッ ケ ー ジ を 使 用 し て procname プ ロ シ ー ジ ャ ー を 登 録 す る 。 プ ロ グ ラ ム prognum、 バ ー ジ ョ ン versnum、 プ ロ シ ー ジ ャ ー procnum へ の 要 求 が 届 い た 場 合 、 procname が パ ラ メ ー タ ー へ の ポ イ ン タ ー を 持 っ て 呼 び 出 さ れ る 。 progname は 静 的 な 結 果 へ の ポ イ ン タ ー を 返 す 必 要 が あ る 。 inproc は パ ラ メ ー タ ー を デ コ ー ド す る た め に 使 用 さ れ る 。 outproc は 結 果 を エ ン コ ー ド す る た め に 使 用 さ れ る 。 こ の ル ー テ ィ ン は 登 録 に 成 功 し た 場 合 に は ゼ ロ を 返 す 。 失 敗 し た 場 合 に は −1 を 返 す 。 警 告 : こ の 形 式 で 登 録 さ れ た リ モ ー ト プ ロ シ ー ジ ャ ー は UDP/IP 通 信 を 使 用 す る 。 制 限 に 関 し て は svcudp_create() を 参 照 す る こ と 。
struct rpc_createerr rpc_createerr; 成 功 し な か っ た RPC ク ラ イ ア ン ト 生 成 ル ー テ ィ ン に よ っ て 設 定 さ れ る 大 域 変 数 。 clnt_pcreateerror() ル ー テ ィ ン が 理 由 を 表 示 す る た め に 使 用 す る 。
void svc_destroy(SVCXPRT *xprt); こ の マ ク ロ は 通 信 ハ ン ド ル xprt の RPC サ ー ビ ス を 破 壊 す る 。 破 壊 に は 通 常 、 xprt を 含 め て 、 私 的 な デ ー タ 構 造 体 の 破 棄 が 含 ま れ て い る 。 こ の ル ー テ ィ ン を 呼 び 出 し た 後 に xprt を 使 用 す る こ と は 未 定 義 で あ る 。
fd_set svc_fdset;
RPC サ ー ビ ス 側 の フ ァ イ ル デ ィ ス ク リ プ タ ー の ビ ッ ト マ ス ク を 反 映 し た 大 域 変 数 。 select(2) シ ス テ ム コ ー ル の パ ラ メ ー タ ー の た め に 利 用 で き る 。 こ れ は 、 サ ー ビ ス の 実 装 者 が svc_run() を 呼 び 出 さ ず に 、 独 自 の 非 同 期 イ ベ ン ト 処 理 を 用 い る 場 合 に の み 意 味 が あ る 。 こ の 変 数 は 読 み 込 み 専 用 で (そ の ま ま select(2) へ 渡 し て は な ら な い !)、 svc_getreqset() 呼 び 出 し や 生 成 ル ー テ ィ ン の 後 に 変 更 さ れ て い る か も し れ な い 。
int svc_fds;
svc_fdset に 似 て い る が 、 32 デ ィ ス ク リ プ タ ー に 制 限 さ れ て い る 。 こ の イ ン タ ー フ ェ ー ス は svc_fdset に よ っ て 置 き 換 え ら れ た 。
svc_freeargs(SVCXPRT *xprt, xdrproc_t inproc, char *in); こ の マ ク ロ は サ ー ビ ス プ ロ シ ー ジ ャ ー が svc_getargs() を 使 用 し て 引 き 数 を デ コ ー ド し た 時 に RPC/XDR シ ス テ ム に よ っ て 割 り 当 て ら れ た デ ー タ を 解 放 す る 。 こ の ル ー テ ィ ン は 解 放 に 成 功 し た 場 合 に は 1 を 返 す 。 失 敗 し た 場 合 に は ゼ ロ を 返 す 。
svc_getargs(SVCXPRT *xprt, xdrproc_t inproc, char *in); こ の マ ク ロ は RPC サ ー ビ ス 通 信 ハ ン ド ル xprt に 関 連 付 け ら れ た RPC 要 求 の 引 き 数 を デ コ ー ド す る 。 パ ラ メ ー タ ー in は 引 き 数 の 格 納 さ れ た ア ド レ ス で あ る 。 inproc は 引 き 数 を デ コ ー ド す る た め の XDR ル ー テ ィ ン で あ る 。 こ の ル ー テ ィ ン は デ コ ー ド に 成 功 し た 場 合 は 1 を 返 す 。 失 敗 し た 場 合 は ゼ ロ を 返 す 。
struct sockaddr_in *svc_getcaller(SVCXPRT *xprt);
RPC サ ー ビ ス 通 信 ハ ン ド ル xprt に 関 連 付 け ら れ た プ ロ シ ー ジ ャ ー の 呼 び 出 し 元 の ネ ッ ト ワ ー ク ア ド レ ス を 取 得 す る た め の 標 準 的 な 手 段 。
void svc_getreqset(fd_set *rdfds); こ の ル ー テ ィ ン は サ ー ビ ス の 実 装 者 が svc_run() を 呼 び 出 さ ず 、 独 自 の 非 同 期 イ ベ ン ト 処 理 を 実 装 す る 場 合 に の み 意 味 が あ る 。 こ れ は select(2) シ ス テ ム コ ー ル が RPC ソ ケ ッ ト に RPC 要 求 が 到 着 し た と 返 し た 場 合 に の み 呼 び 出 さ れ る 。 rdfds は 結 果 の 読 み 込 み フ ァ イ ル デ ィ ス ク リ プ タ ー の ビ ッ ト マ ス ク で あ る 。 こ の ル ー テ ィ ン は rdfds の 値 に 関 連 付 け ら れ た 全 て の ソ ケ ッ ト の サ ー ビ ス が 行 な わ れ た 時 に 返 っ て く る 。
void svc_getreq(int rdfds);
svc_getreqset() に 似 て い る が デ ィ ス ク リ プ タ ー の 数 が 32 に 制 限 さ れ て い る 。 こ の イ ン タ ー フ ェ ー ス は svc_getreqset() に よ っ て 置 き 換 え ら れ た 。
bool_t
svc_register(SVCXPRT *xprt, unsigned long
prognum,
unsigned long versnum,
void (*dispatch)(svc_req *, SVCXPRT *),
unsigned long protocol);
prognum と versnum を サ ー ビ ス 配 分 プ ロ シ ー ジ ャ ー dispatch で 関 連 付 け る 。 protocol が ゼ ロ の 場 合 、 サ ー ビ ス は portmap サ ー ビ ス に は 登 録 さ れ な い 。 protocol が ゼ ロ 以 外 の 場 合 、 [prognum,versnum,protocol] の 組 み 合 わ せ と xprt−>xp_port と の マ ッ ピ ン グ が ロ ー カ ル の portmap サ ー ビ ス に 登 録 さ れ る 。 (一 般 的 に protocol は ゼ ロ 、 IPPROTO_UDP、 IPPROTO_TCP の ど れ か で あ る 。 ) プ ロ シ ー ジ ャ ー dispatch は 以 下 の 形 式 で あ る :
dispatch(struct svc_req *request, SVCXPRT *xprt);
svc_register() ル ー テ ィ ン は 成 功 し た 場 合 は 1 を 返 す 。 失 敗 し た 場 合 は ゼ ロ を 返 す 。
void svc_run(void); こ の ル ー テ ィ ン は 戻 っ て こ な い 。 こ れ は RPC 要 求 の 到 着 を 待 ち 、 ど れ か が 届 い た 場 合 に svc_getreq() を 使 用 し て 適 切 な サ ー ビ ス プ ロ シ ー ジ ャ ー を 呼 び 出 す 。 こ の プ ロ シ ー ジ ャ ー は 通 常 は select(2) シ ス テ ム コ ー ル か ら 返 る の を 待 っ て い る 。
bool_t svc_sendreply(SVCXPRT *xprt, xdrproc_t outproc, char *out);
RPC サ ー ビ ス 配 分 ル ー テ ィ ン に よ っ て リ モ ー ト プ ロ シ ー ジ ャ ー コ ー ル の 結 果 を 返 す た め に 呼 び 出 さ れ る 。 パ ラ メ ー タ ー xprt は そ の 要 求 に 関 連 付 け ら れ た 通 信 ハ ン ド ル で あ る 。 outproc は 結 果 を エ ン コ ー ド す る た め に 使 用 す る XDR ル ー テ ィ ン で あ る 。 out は 結 果 の ア ド レ ス で あ る 。 こ の ル ー テ ィ ン は 成 功 し た 場 合 は 1 を 返 す 。 失 敗 し た 場 合 は ゼ ロ を 返 す 。
void svc_unregister(unsigned long prognum, unsigned long versnum); 配 分 ル ー テ ィ ン か ら [prognum,versnum] お よ び [prognum,versnum,*] の 組 み 合 わ せ か ら ポ ー ト 番 号 へ の マ ッ ピ ン グ を 全 て 削 除 す る 。
void svcerr_auth(SVCXPRT *xprt, enum auth_stat why); 認 証 エ ラ ー に よ り リ モ ー ト プ ロ シ ー ジ ャ ー コ ー ル の 実 行 を 拒 否 さ れ た 場 合 に サ ー ビ ス 配 分 ル ー テ ィ ン に よ っ て 呼 び 出 さ れ る 。
void svcerr_decode(SVCXPRT *xprt); パ ラ メ ー タ ー の デ コ ー ド に 失 敗 し た 場 合 に サ ー ビ ス 配 分 ル ー テ ィ ン に よ っ て 呼 び 出 さ れ る 。 svc_getargs() も 参 照 す る こ と 。
void svcerr_noproc(SVCXPRT *xprt); 要 求 の あ っ た プ ロ シ ー ジ ャ ー 番 号 が 実 装 さ れ て い な い 場 合 に サ ー ビ ス 配 分 ル ー テ ィ ン よ り 呼 び 出 さ れ る 。
void svcerr_noprog(SVCXPRT *xprt);
RPC パ ッ ケ ー ジ に 要 求 さ れ た プ ロ グ ラ ム が 登 録 さ れ て い な い 場 合 に 呼 び 出 さ れ る 。 サ ー ビ ス の 実 装 に は 通 常 、 こ の ル ー テ ィ ン は 必 要 な い 。
void svcerr_progvers(SVCXPRT *xprt);
RPC パ ッ ケ ー ジ に 要 求 さ れ た バ ー ジ ョ ン の プ ロ グ ラ ム が 登 録 さ れ て い な い 場 合 に 呼 び 出 さ れ る 。 サ ー ビ ス の 実 装 に は 通 常 、 こ の ル ー テ ィ ン は 必 要 な い 。
void svcerr_systemerr(SVCXPRT *xprt); 特 定 の プ ロ ト コ ル に よ っ て カ バ ー さ れ て い な シ ス テ ム エ ラ ー が 検 出 さ れ た 場 合 に サ ー ビ ス 配 分 ル ー テ ィ ン に よ っ て 呼 び 出 さ れ る 。 例 え ば 、 サ ー ビ ス が そ れ 以 上 、 記 憶 装 置 を 割 り 当 て る こ と が で き な い 場 合 に は こ の ル ー テ ィ ン が 呼 び 出 さ れ る か も し れ な い 。
void svcerr_weakauth(SVCXPRT *xprt); 認 証 パ ラ メ ー タ ー が 足 り な い た め に リ モ ー ト プ ロ シ ー ジ ャ ー コ ー ル の 実 行 を 拒 否 さ れ た 場 合 に サ ー ビ ス 配 分 ル ー テ ィ ン に よ っ て 呼 び 出 さ れ る 。 こ の ル ー テ ィ ン は svcerr_auth(xprt, AUTH_TOOWEAK) を 呼 び 出 す 。
SVCXPRT
*svcfd_create(int fd, unsigned int
sendsize,
unsigned int recvsize); 任 意
の オ ー プ ン さ
れ た デ ィ ス ク
リ プ タ ー 上 に
サ ー ビ ス を 作
成 す る 。 典 型
的 に 、 デ ィ ス
ク リ プ タ ー は TCP
の よ う な ス ト
リ ー ム プ ロ ト
コ ル で 接 続 さ
れ た ソ ケ ッ ト
で あ る 。 sendsize と
recvsize に は 送 信 バ
ッ フ ァ ー と 受
信 バ ッ フ ァ ー
の 大 き さ を 指
定 す る 。 も し
ゼ ロ が 指 定 さ
れ た 場 合 は 適
切 な デ フ ォ ル
ト が 選 択 さ れ
る 。
SVCXPRT *svcraw_create(void); こ の ル ー テ ィ ン は 擬 似 RPC サ ー ビ ス 通 信 を 生 成 し て 、 そ の ポ イ ン タ ー を 返 す 。 通 信 は 実 際 に は そ の プ ロ セ ス の ア ド レ ス 空 間 に あ る バ ッ フ ァ ー な の で 対 応 す る RPC ク ラ イ ア ン ト は 同 じ ア ド レ ス 空 間 に い る 必 要 が あ る 。 clntraw_create() を 参 照 す る こ と 。 こ の ル ー テ ィ ン で RPC の シ ミ ュ レ ー シ ョ ン や 、 カ ー ネ ル イ ン タ ー フ ェ ー ス に 影 響 さ れ ず に 応 答 時 間 な ど の RPC オ ー バ ヘ ッ ド を 取 得 が で き る 。 こ の ル ー テ ィ ン は 失 敗 し た 場 合 は NULL を 返 す 。
SVCXPRT
*svctcp_create(int sock, unsigned int
send_buf_size,
unsigned int recv_buf_size); こ
の ル ー テ ィ ン
は TCP/IP に 基 づ く RPC
サ ー ビ ス 通 信
を 作 成 し 、 そ
れ へ の ポ イ ン
タ ー を 返 す 。
通 信 は ソ ケ ッ
ト sock に 結 び つ
け ら れ る 。 sock
は RPC_ANYSOCK で も 良
い 。 こ の 場 合
は 新 し い ソ ケ
ッ ト が 作 成 さ
れ る 。 も し ソ
ケ ッ ト が ロ ー
カ ル な TCP ポ ー ト
に bind さ れ て い な
い 場 合 は 、 こ
の ル ー テ ィ ン
が 適 当 な ポ ー
ト に bind す る 。 補
完 さ れ た 場 合
、 xprt−>xp_sock に は
通 信 の ソ ケ ッ
ト デ ィ ス ク リ
プ タ ー が 、
xprt−>xp_port に は 通
信 の ポ ー ト 番
号 が 設 定 さ れ
る 。 こ の ル ー
テ ィ ン は 失 敗
し た 場 合 は NULL を
返 す 。 TCP に 基 づ
い た RPC は バ ッ フ
ァ ー さ れ た I/O を
使 用 す る た め
、 ユ ー ザ ー は
バ ッ フ ァ ー の
大 き さ を 指 定
で き る 。 ゼ ロ
を 指 定 し た 場
合 は 適 切 な デ
フ ォ ル ト が 選
択 さ れ る 。
SVCXPRT
*svcudp_bufcreate(int sock, unsigned int
sendsize,
unsigned int recosize); こ の
ル ー テ ィ ン は UDP/IP
に 基 づ い た RPC サ
ー ビ ス 通 信 を
作 成 し 、 そ の
ポ イ ン タ ー を
返 す 。 通 信 は
ソ ケ ッ ト sock に
関 連 付 け ら れ
る 。 sock は RPC_ANYSOCK
で も 良 い 。 こ
の 場 合 は 新 し
い ソ ケ ッ ト が
作 成 さ れ る 。
ソ ケ ッ ト が ロ
ー カ ル の UDP ポ ー
ト に bind さ れ て い
な い 場 合 に は
こ の ル ー テ ィ
ン は 適 当 な ポ
ー ト に bind す る 。
補 完 さ れ た 場
合 、 xprt−>xp_sock に
通 信 の ソ ケ ッ
ト の デ ィ ス ク
リ プ タ ー が 、
xprt−>xp_port に 通 信
の ポ ー ト 番 号
が 設 定 さ れ る
。 こ の ル ー テ
ィ ン は 失 敗 し
た 場 合 に は NULL を
返 す 。 こ れ を
使 用 す る と UDP に
基 づ い た RPC メ ッ
セ ー ジ に お い
て 送 信 パ ケ ッ
ト や 受 信 パ ケ
ッ ト の 最 大 サ
イ ズ を 指 定 す
る こ と が 可 能
に な る 。
SVCXPRT *svcudp_create(int sock); 送 信 パ ケ ッ ト と 受 信 パ ケ ッ ト の サ イ ズ を 同 じ デ フ ォ ル ト の 値 SZ に 指 定 し た svcudp_bufcreate(sock,SZ,SZ) と 等 価 で あ る 。
bool_t xdr_accepted_reply(XDR *xdrs, struct accepted_reply *ar);
RPC 応 答 メ ッ セ ー ジ を エ ン コ ー ド す る の に 使 用 す る 。 こ の ル ー テ ィ ン は RPC パ ッ ケ ー ジ を 用 い ず に RPC−形 式 の メ ッ セ ー ジ を 作 成 し よ う と す る 場 合 に 便 利 で あ る 。
bool_t xdr_authunix_parms(XDR *xdrs, struct authunix_parms *aupp);
UNIX 形 式 の 証 明 書 を 記 述 す る た め に 使 用 す る 。 こ の ル ー テ ィ ン は RPC 認 証 パ ッ ケ ー ジ を 使 用 せ ず に こ れ ら の 証 明 書 を 作 成 し よ う と す る 場 合 に 便 利 で あ る 。
void xdr_callhdr(XDR *xdrs, struct rpc_msg *chdr);
RPC 呼 び 出 し の ヘ ッ ダ ー メ ッ セ ー ジ を 記 述 す る た め に 使 用 す る 。 こ の ル ー テ ィ ン は RPC パ ッ ケ ー ジ を 使 用 せ ず に RPC−形 式 の メ ッ セ ー ジ を 作 成 し よ う と す る 場 合 に 便 利 で あ る 。
bool_t xdr_callmsg(XDR *xdrs, struct rpc_msg *cmsg);
RPC 呼 び 出 し メ ッ セ ー ジ を 記 述 す る の に 使 用 す る 。 こ の ル ー テ ィ ン は RPC パ ッ ケ ー ジ を 使 用 せ ず に RPC−形 式 の メ ッ セ ー ジ を 作 成 し よ う と す る 場 合 に 便 利 で あ る 。
bool_t xdr_opaque_auth(XDR *xdrs, struct opaque_auth *ap);
PRC 認 証 情 報 メ ッ セ ー ジ を 記 述 す る た め に 使 用 す る 。 こ の ル ー テ ィ ン は RPC パ ッ ケ ー ジ を 使 用 せ ず に RPC−形 式 の メ ッ セ ー ジ を 作 成 し よ う と す る 場 合 に 便 利 で あ る 。
bool_t xdr_pmap(XDR *xdrs, struct pmap *regs); 各 種 の portmap プ ロ シ ー ジ ャ ー へ の パ ラ メ ー タ ー を 外 部 的 に 記 述 す る た め に 使 用 す る 。 こ の ル ー テ ィ ン は pmap イ ン タ ー フ ェ ー ス を 使 用 せ ず に 、 こ れ ら の パ ラ メ ー タ ー を 作 成 し た い 場 合 に 便 利 で あ る 。
bool_t xdr_pmaplist(XDR *xdrs, struct pmaplist **rp); ポ ー ト の マ ッ ピ ン グ の リ ス ト を 外 部 的 に 記 述 す る た め に 使 用 す る 。 こ の ル ー テ ィ ン は pmap イ ン タ ー フ ェ ー ス を 使 用 せ ず に 、 こ れ ら の パ ラ メ ー タ ー を 作 成 し た い 場 合 に 便 利 で あ る 。
bool_t xdr_rejected_reply(XDR *xdrs, struct rejected_reply *rr);
RPC 応 答 メ ッ セ ー ジ を 記 述 す る た め に 使 用 す る 。 こ の ル ー テ ィ ン は RPC パ ッ ケ ー ジ を 使 用 せ ず に 、 RPC−形 式 の メ ッ セ ー ジ を 作 成 し た い 場 合 に 便 利 で あ る 。
bool_t xdr_replymsg(XDR *xdrs, struct rpc_msg *rmsg);
RPC 応 答 メ ッ セ ー ジ を 記 述 す る た め に 使 用 す る 。 こ の ル ー テ ィ ン は RPC パ ッ ケ ー ジ を 使 用 せ ず に 、 RPC 形 式 の メ ッ セ ー ジ を 作 成 し た い 場 合 に 便 利 で あ る 。
void xprt_register(SVCXPRT *xprt);
RPC サ ー ビ ス 通 信 ハ ン ド ル を 生 成 し た 後 に 、 そ れ ら 自 身 を RPC サ ー ビ ス パ ッ ケ ー ジ に 登 録 す る 必 要 が あ る 。 こ の ル ー テ ィ ン は 大 域 変 数 svc_fds を 修 正 す る 。 サ ー ビ ス の 実 装 者 は 通 常 、 こ の ル ー テ ィ ン は 必 要 な い 。
void xprt_unregister(SVCXPRT *xprt);
RPC サ ー ビ ス 通 信 ハ ン ド ル を 破 壊 す る 前 に 、 そ れ を RPC 通 信 パ ッ ケ ー ジ か ら 登 録 解 除 す る 必 要 が あ る 。 こ の ル ー テ ィ ン は 大 域 変 数 svc_fds を 修 正 す る 。 サ ー ビ ス の 実 装 者 は 通 常 、 こ の ル ー テ ィ ン は 必 要 な い 。
関 連 項 目
xdr(3) 以 下 の マ ニ ュ ア ル :
Remote Procedure Calls:
Protocol Specification
Remote Procedure Call Programming Guide
rpcgen Programming Guide
RPC: Remote Procedure Call Protocol Specification, RFC 1050, Sun Microsystems, Inc., USC−ISI.
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。