X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=draft%2Fman3%2Fcmsg.3;fp=draft%2Fman3%2Fcmsg.3;h=0000000000000000000000000000000000000000;hb=2460a0b8024ceb8570acdbc9208713d79458efcb;hp=79f526b4c0650c8ea30eb7943722bdd27f35f937;hpb=83f9e5d087c3464d5131604d3c9893479e6228eb;p=linuxjm%2FLDP_man-pages.git diff --git a/draft/man3/cmsg.3 b/draft/man3/cmsg.3 deleted file mode 100644 index 79f526b4..00000000 --- a/draft/man3/cmsg.3 +++ /dev/null @@ -1,160 +0,0 @@ -.\" This man page is Copyright (C) 1999 Andi Kleen . -.\" -.\" %%%LICENSE_START(VERBATIM_ONE_PARA) -.\" Permission is granted to distribute possibly modified copies -.\" of this page provided the header is included verbatim, -.\" and in case of nontrivial modification author and date -.\" of the modification is added to the header. -.\" %%%LICENSE_END -.\" -.\" $Id: cmsg.3,v 1.8 2000/12/20 18:10:31 ak Exp $ -.\"******************************************************************* -.\" -.\" This file was generated with po4a. Translate the source file. -.\" -.\"******************************************************************* -.\" -.\" Japanese Version Copyright (c) 1999 Shouichi Saito -.\" all rights reserved. -.\" Translated Mon Jul 26 21:58:26 JST 1999 -.\" by Shouichi Saito -.\" Proofed Tue Aug 17 1999 by NAKANO Takeo -.\" -.TH CMSG 3 2014\-12\-31 Linux "Linux Programmer's Manual" -.SH 名前 -CMSG_ALIGN, CMSG_SPACE, CMSG_NXTHDR, CMSG_FIRSTHDR \- 補助データにアクセスする。 -.SH 書式 -\fB#include \fP -.sp -\fBstruct cmsghdr *CMSG_FIRSTHDR(struct msghdr *\fP\fImsgh\fP\fB);\fP -.br -\fBstruct cmsghdr *CMSG_NXTHDR(struct msghdr *\fP\fImsgh\fP\fB, struct cmsghdr -*\fP\fIcmsg\fP\fB);\fP -.br -\fBsize_t CMSG_ALIGN(size_t \fP\fIlength\fP\fB);\fP -.br -\fBsize_t CMSG_SPACE(size_t \fP\fIlength\fP\fB);\fP -.br -\fBsize_t CMSG_LEN(size_t \fP\fIlength\fP\fB);\fP -.br -\fBunsigned char *CMSG_DATA(struct cmsghdr *\fP\fIcmsg\fP\fB);\fP -.sp -.nf -struct cmsghdr { - socklen_t cmsg_len; /* data byte count, including header */ - int cmsg_level; /* originating protocol */ - int cmsg_type; /* protocol\-specific type */ - /* followed by unsigned char cmsg_data[]; */ -}; -.fi -.SH 説明 -これらのマクロは制御メッセージ (補助データ (ancillary data) とも呼ばれる) を作り、 それにアクセスするために使われる。 -制御メッセージはソケットにのるデータではない。 この制御情報は、到着したパケットへのインターフェイス、様々なあまり -使われないヘッダーフィールド、エラー記述の拡張、ファイルデスクリ プタの集合や、UNIXにおける信頼情報 (credential) を含んでいる。 -制御メッセージは、例えば IP オプションのような追加ヘッダーフィールドを 送るのに使う事ができる。 補助データは、 \fBsendmsg\fP(2) -を呼び出して送り、 \fBrecvmsg\fP(2) を呼び出して受け取る。 詳細はそれらのマニュアルページを参照。 -.PP -補助データは \fIstruct cmsghdr\fP 構造体のシーケンスに追加データが付加されたものである。 -このシーケンスにはこのマニュアルページに書かれている マクロを使ってアクセスすべきで、直接アクセスすべきではない。 -使用可能な制御メッセージのタイプについては、 それぞれのプロトコルのマニュアルページを参照のこと。 接続毎の最大補助用バッファーサイズは -\fI/proc/sys/net/core/optmem_max\fP を使って設定できる。 \fBsocket\fP(7) を参照。 -.PP -\fBCMSG_FIRSTHDR\fP() は、渡した \fImsghdr\fP に関連した補助データバッファー中の、最初の \fIcmsghdr\fP -へのポインターを返す。 -.PP -\fBCMSG_NXTHDR\fP() は、渡した \fIcmsghdr\fP の次にくる (有効な) \fIcmsghdr\fP を返す。 -バッファーに十分な空きが無い場合、NULL を返す。 -.PP -\fBCMSG_ALIGN\fP() に長さを与えると、必要なアラインメントを加味した長さを返してくる。 これは定数式である。 -.PP -\fBCMSG_SPACE\fP() は、与えたデータ長が占めるのに必要な補助要素 (ancillary element) の -バイト数を返す。これは定数式である。 -.PP -\fBCMSG_DATA\fP() は、 \fIcmsghdr\fP のデータ部分へのポインターを返す。 -.PP -\fBCMSG_LEN\fP() は、 \fIcmsghdr\fP 構造体の \fIcmsg_len\fP -メンバにデータを格納する際に必要な値を返す。アラインメントも考慮に入れ られる。 引数としてデータ長をとる。これは定数式である。 -.PP -補助データを作るためには最初に \fImsghdr\fP のメンバー \fImsg_controllen\fP を、制御メッセージバッファーの長さで初期化する。 -\fBCMSG_FIRSTHDR\fP() を \fImsghdr\fP に用いると最初の制御メッセージが得られ、 \fBCMSG_NXTHDR\fP() -を使うと次の制御メッセージが得られる。 それぞれの制御メッセージでは、 \fIcmsg_len\fP を初期化する (\fBCMSG_LEN\fP() を使う)。 -その他の \fIcmsghdr\fP ヘッダーフィールド、そしてデータ部分に対しても \fBCMSG_DATA\fP() を使って初期化をする。 最後に -\fImsghdr\fP の \fImsg_controllen\fP フィールドに、バッファー中の制御メッセージの長さの \fBCMSG_SPACE\fP() -の合計がセットされる。 \fImsghdr\fP についての詳細は \fBrecvmsg\fP(2) を参照。 -.PP -制御メッセージバッファーが全てのメッセージを納めるのには短すぎる場合、 \fImsghdr\fP の \fImsg_flags\fP メンバーに -\fBMSG_CTRUNC\fP フラグがセットされる。 -.SH 準拠 -この補助データモデルは、POSIX.1g draft, 4.4BSD\-Lite, RFC\ 2292 に 記述されている IPv6 advanced -API, そして SUSv2 に準拠している。 \fBCMSG_ALIGN\fP() は Linux の拡張である。 -.SH 注意 -移植性のために、補助データへのアクセスには、 ここで述べられているマクロだけを使うべきである。 \fBCMSG_ALIGN\fP() は Linux -での拡張であり、移植性を考えたプログラムでは使うべきではない。 -.PP -Linux では \fBCMSG_LEN\fP(), \fBCMSG_DATA\fP(), \fBCMSG_ALIGN\fP() は定数式である -(それらの引数が定数とみなされる)。 このことは、大域変数のサイズを宣言するのに使える。 しかし移植性はなくなるだろう。 -.SH 例 -次のコードは、受け取った補助バッファーから \fBIP_TTL\fP オプションを探すものである。 -.PP -.in +4n -.nf -struct msghdr msgh; -struct cmsghdr *cmsg; -int *ttlptr; -int received_ttl; - -/* Receive auxiliary data in msgh */ -for (cmsg = CMSG_FIRSTHDR(&msgh); cmsg != NULL; - cmsg = CMSG_NXTHDR(&msgh,cmsg)) { - if (cmsg\->cmsg_level == IPPROTO_IP - && cmsg\->cmsg_type == IP_TTL) { - ttlptr = (int *) CMSG_DATA(cmsg); - received_ttl = *ttlptr; - break; - } -} -if (cmsg == NULL) { - /* - * Error: IP_TTL not enabled or small buffer - * or I/O error. - */ -} -.fi -.in -.PP -以下のコードは、 \fBSCM_RIGHTS\fP を使い、ファイルディスクリプターの配列を UNIX ドメインソケットを通して送るものである。 -.PP -.in +4n -.nf -struct msghdr msg = {0}; -struct cmsghdr *cmsg; -int myfds[NUM_FD]; /* Contains the file descriptors to pass. */ -union { - /* ancillary data buffer, wrapped in a union in order to ensure it is - suitably aligned */ - char buf[CMSG_SPACE(sizeof myfds)]; - struct cmsghdr align; -} u; -int *fdptr; - -msg.msg_control = u.buf; -msg.msg_controllen = sizeof u.buf; -cmsg = CMSG_FIRSTHDR(&msg); -cmsg\->cmsg_level = SOL_SOCKET; -cmsg\->cmsg_type = SCM_RIGHTS; -cmsg\->cmsg_len = CMSG_LEN(sizeof(int) * NUM_FD); -/* Initialize the payload: */ -fdptr = (int *) CMSG_DATA(cmsg); -memcpy(fdptr, myfds, NUM_FD * sizeof(int)); -/* Sum of the length of all control messages in the buffer: */ -msg.msg_controllen = cmsg\->cmsg_len; -.fi -.in -.SH 関連項目 -\fBrecvmsg\fP(2), \fBsendmsg\fP(2) -.PP -RFC\ 2292 -.SH この文書について -この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部 -である。プロジェクトの説明とバグ報告に関する情報は -http://www.kernel.org/doc/man\-pages/ に書かれている。