FreeBSD 日本語マニュアル検索 (jman/japropos/jwhatis)


日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。

4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)

13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。



検索コマンド: man apropos whatis
コマンド/キーワード:
日本語マニュアル RELEASE :
セクション:
Table of Contents
名称 | 書式 | 解説 | 使用例 | 関連項目 | 規格 | 歴史
CMSG_DATA(3)           FreeBSD ライブラリ関数マニュアル           CMSG_DATA(3)

名称
     CMSG_DATA, CMSG_FIRSTHDR, CMSG_LEN, CMSG_NXTHDR, CMSG_SPACE -- 補助的な
     データアクセスのためのソケット制御メッセージルーチン

書式
     #include <sys/socket.h>

     unsigned char *
     CMSG_DATA(struct cmsghdr *);

     struct cmsghdr *
     CMSG_FIRSTHDR(struct msghdr *);

     size_t
     CMSG_LEN(size_t);

     struct cmsghdr *
     CMSG_NXTHDR(struct msghdr *, struct cmsghdr *);

     size_t
     CMSG_SPACE(size_t);

解説
     制御メッセージ API は、ソケットに渡って送信して、受信された制御メッセージ
     の使用のための補助的なデータオブジェクトを構成するために使用されます。

     制御メッセージは、recvmsg(2)sendmsg(2) システムコールによって、まわり
     に渡されます。recvmsg(2) に記述されている、cmsghdr 構造体は、制御メッセー
     ジのチェーンを指定するために使用されます。

     これらのルーチンは、それらが、必要な整列の制限が対処されることを保証する
     ように制御メッセージのヘッダメンバとデータバッファに直接アクセスする代わ
     りに使用されるべきです。

     次のルーチンが、提供されます:

     CMSG_DATA(cmsg)
             このルーチンは、制御メッセージヘッダ cmsg のデータ部分にアクセス
             します。それは、補助的なデータの最初で対処する適切な整列の制限を
             保証します。

     CMSG_FIRSTHDR(msghdr)
             このルーチンは、メッセージ msghdr にアタッチされる最初の制御メッ
             セージにアクセスします。制御メッセージがメッセージにアタッチして
             いないなら、このルーチンは、NULL を返します。

     CMSG_LEN(len)
             このルーチンは、制御メッセージヘッダを含む制御メッセージのバイト
             単位のサイズを決定します。len は、制御メッセージによって保持され
             たデータの長さを指定します。この値は、通常、各制御メッセージの
             cmsg_len に格納されるものです。このルーチンは、補助的なデータの最
             初であらゆる整列の制限のために計上します。

     CMSG_NXTHDR(msghdr, cmsg)
             このルーチンは、メッセージ msghdr の制御メッセージに続く cmsg の
             位置を返します。cmsg がチェーンの最後の制御メッセージであるなら、
             このルーチンは、NULL を返します。

     CMSG_SPACE(len)
             このルーチンは、制御メッセージヘッダを含む、長さ len の制御メッ
             セージとその内容を保持するために必要とされるバイト単位のサイズを
             決定します。この値は、通常 msg_msgcontrollen に格納されるもので
             す。このルーチンは、次の制御メッセージをパディングすることが必要
             であるのと同様に、補助的なデータの最初であらゆる整列の制限を計上
             します。

使用例
     次の例は、親プロセスのファイル記述子を含んでいる制御メッセージを構成し、
     それを、子プロセスの上のあらかじめ共有されたソケットに渡します。次に、子
     プロセスは、受信されたファイル記述子を使用して、親プロセスに "hello" 文字
     列を送信します。

     #include <sys/socket.h>

     #include <err.h>
     #include <stdio.h>
     #include <string.h>
     #include <sysexits.h>
     #include <unistd.h>

     #define HELLOLEN    sizeof("hello")

     int
     main()
     {
             struct msghdr msg;
             union {
                     struct cmsghdr hdr;
                     unsigned char    buf[CMSG_SPACE(sizeof(int))];
             } cmsgbuf;
             char buf[HELLOLEN];
             int hellofd[2];
             int presharedfd[2];
             struct cmsghdr *cmsg;

             if (socketpair(PF_LOCAL, SOCK_STREAM, 0, presharedfd) == -1)
                     err(EX_OSERR, "failed to create a pre-shared socket pair");

             memset(&msg, 0, sizeof(msg));
             msg.msg_control = &cmsgbuf.buf;
             msg.msg_controllen = sizeof(cmsgbuf.buf);
             msg.msg_iov = NULL;
             msg.msg_iovlen = 0;

             switch (fork()) {
             case -1:
                     err(EX_OSERR, "fork");
             case 0:
                     close(presharedfd[0]);
                     strlcpy(buf, "hello", HELLOLEN);

                     if (recvmsg(presharedfd[1], &msg, 0) == -1)
                             err(EX_IOERR, "failed to receive a message");
                     if (msg.msg_flags & (MSG_CTRUNC | MSG_TRUNC))
                             errx(EX_IOERR, "control message truncated");
                     for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL;
                         cmsg = CMSG_NXTHDR(&msg, cmsg)) {
                             if (cmsg->cmsg_len == CMSG_LEN(sizeof(int)) &&
                                 cmsg->cmsg_level == SOL_SOCKET &&
                                 cmsg->cmsg_type == SCM_RIGHTS) {
                                     hellofd[1] = *(int *)CMSG_DATA(cmsg);
                                     printf("child: sending '%s'\n", buf);
                                     if (write(hellofd[1], buf, HELLOLEN) == -1)
                                         err(EX_IOERR, "failed to send 'hello'");
                             }
                     }
                     break;
             default:
                     close(presharedfd[1]);

                     if (socketpair(PF_LOCAL, SOCK_STREAM, 0, hellofd) == -1)
                             err(EX_OSERR, "failed to create a 'hello' socket pair");

                     cmsg = CMSG_FIRSTHDR(&msg);
                     cmsg->cmsg_len = CMSG_LEN(sizeof(int));
                     cmsg->cmsg_level = SOL_SOCKET;
                     cmsg->cmsg_type = SCM_RIGHTS;
                     *(int *)CMSG_DATA(cmsg) = hellofd[1];

                     if (sendmsg(presharedfd[0], &msg, 0) == -1)
                             err(EX_IOERR, "sendmsg");
                     close(hellofd[1]);

                     if (read(hellofd[0], buf, HELLOLEN) == -1)
                             err(EX_IOERR, "faild to receive 'hello'");
                     printf("parent: received '%s'\n", buf);
                     break;
             }

             return (0);
     }

関連項目
     recvmsg(2), sendmsg(2), socket(2), ip(4), ip6(4), unix(4)

規格
     W. Stevens and M. Thomas, Advanced Sockets API for IPv6, RFC 2292,
     February 1998.

     W. Stevens, M. Thomas, E. Nordmark, and T. Jinmei, Advanced Sockets
     Application Program Interface (API) for IPv6, RFC 3542, May 2003.

歴史
     制御メッセージ API は、4.2BSD ではじめて登場しました。このマニュアルペー
     ジは、最初 OpenBSD 3.8 のために Jared Yanovich <jaredy@OpenBSD.org> に
     よって書かれ、最終的に Mateusz Piotrowski <0mp@FreeBSD.org> によって
     FreeBSD 12.0 に提出されました。

FreeBSD 12.2                    March 13, 2020                    FreeBSD 12.2

Table of Contents

FreeBSD マニュアル検索