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.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)

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



検索コマンド: man apropos whatis
コマンド/キーワード:
日本語マニュアル RELEASE :
セクション:
Table of Contents
名称 | 書式 | 解説 | 使用例 | 関連項目 | 歴史 | 作者 | バグ
SYSCTL_CTX_INIT(9)     FreeBSD カーネル開発者マニュアル     SYSCTL_CTX_INIT(9)

名称
     sysctl_ctx_init, sysctl_ctx_free, sysctl_ctx_entry_add,
     sysctl_ctx_entry_find, sysctl_ctx_entry_del -- 動的に作成される sysctl
     OID を管理するための sysctl コンテキスト

書式
     #include <sys/types.h>
     #include <sys/sysctl.h>

     int
     sysctl_ctx_init(struct sysctl_ctx_list *clist);

     int
     sysctl_ctx_free(struct sysctl_ctx_list *clist);

     struct sysctl_ctx_entry *
     sysctl_ctx_entry_add(struct sysctl_ctx_list *clist,
         struct sysctl_oid *oidp);

     struct sysctl_ctx_entry *
     sysctl_ctx_entry_find(struct sysctl_ctx_list *clist,
         struct sysctl_oid *oidp);

     int
     sysctl_ctx_entry_del(struct sysctl_ctx_list *clist,
         struct sysctl_oid *oidp);

解説
     これらの関数は、動的に作成される OID を管理するためのインタフェースを提供
     しています。sysctl コンテキストは、必要なとき、それらの適切な削除と同様に
     作成された OID の経過を追うために責任があります。それは、OID の削除操作に
     単純なトランザクションの側面を追加します。すなわち、削除の操作が部分的な
     方法に失敗するなら、sysctl ツリーをその前の状態にロールバックすることは可
     能です。

     sysctl_ctx_init() 関数は、sysctl コンテキストを初期化します。clist 引数
     は、既に割り付けられた変数を指さなければなりません。使用する前に、コンテ
     キストは、初期化されていなければなりません。いったんそれが初期化される
     と、コンテキストへのポインタは、すべての SYSCTL_ADD_* マクロ
     (sysctl_add_oid(9) を参照) への引数として渡すことができ、それは、新しく作
     成された OID を指すエントリで更新されます。

     内部的に、コンテキストは、queue(3) TAILQ リンクリストとして表わされます。
     リストは、次の struct sysctl_ctx_entry エントリから成ります:

           struct sysctl_ctx_entry {
                   struct sysctl_oid *entry;
                   TAILQ_ENTRY(sysctl_ctx_entry) link;
           };

           TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry);

     各コンテキストのエントリは、それが管理する 1 つの動的な OID を指します。
     新しく作成された OID は、常にリストの前に挿入されます。

     sysctl_ctx_free() 関数は、それが管理するコンテキストと関連する OID を削除
     します。関数が成功して完了するなら、すべての管理された OID は、(ツリーか
     ら削除される) 登録を抹消され、それらのすべての割り付けられたメモリととも
     に解放され、同様にコンテキストのエントリも解放されます。

     削除操作は、2 ステップで行なわれます。最初に、各コンテキストのエントリに
     ついて、関数 sysctl_remove_oid(9) は、リソースの解放を禁止する、0 に設定
     されるパラメータ del を付けて、実行されます。このステップの間にエラーがな
     いなら、sysctl_ctx_free() は、次のステップに移ります。最初のステップが失
     敗するなら、コンテキストに関連したすべての登録を抹消された OID は、再び登
     録されます。

     注: ほとんどの場合に、プログラマは、OID を作成するとき、OID 番号として
     OID_AUTO を指定します。しかしながら、ツリーの OID の登録の間に、この番号
     は、CTL_AUTO_START 以上の最初の利用可能な番号に変更されます。コンテキスト
     の削除の最初のステップが失敗するなら、OID の再登録は、既に割り当てられた
     (OID_AUTO と異なる) OID 番号を変更しません。これは、再登録されたエントリ
     がツリーのそれらのオリジナルの位置を維持することを保証します。

     2 番目のステップは、実際に動的な OID の削除を行ないます。
     sysctl_remove_oid(9) は、始まり (すなわち、最新のエントリ) から開始して、
     コンテキストのリストを通して繰り返します。重要: 今回は、関数は、ツリーか
     ら OID を削除するだけでなく、すべてのコンテキストのエントリのメモリと同様
     に、(oid_refcnt == 0 という条件で) それらのメモリも解放します。

     sysctl_ctx_entry_add() 関数は、コンテキストへの既存の動的な OID の追加を
     許可します。

     sysctl_ctx_entry_del() 関数は、コンテキストからエントリを削除します。重
     要: この場合に、対応する struct sysctl_ctx_entry だけが解放されますが、
     oidp ポインタは、そのままです。その後、プログラマは、この OID に割り付け
     られたリソースを管理する責任があります。

     sysctl_ctx_entry_find() 関数は、コンテキストリスト内の与えられた oidp を
     検索し、見つかった struct sysctl_ctx_entry へのポインタを返すか、または
     NULL を返します。

使用例
     次は、新しいトップレベルのカテゴリを作成する方法、と既存の静的なノードに
     別のサブツリーを連結する方法の使用例です。この使用例は、OID の経過を追う
     ためにコンテキストを使用します。

     #include <sys/sysctl.h>
      ...
     static struct sysctl_ctx_list clist;
     static struct sysctl_oid *oidp;
     static int a_int;
     static const char *string = "dynamic sysctl";
      ...

     sysctl_ctx_init(&clist);
     oidp = SYSCTL_ADD_ROOT_NODE(&clist,
             OID_AUTO, "newtree", CTLFLAG_RW, 0, "new top level tree");
     oidp = SYSCTL_ADD_INT(&clist, SYSCTL_CHILDREN(oidp),
             OID_AUTO, "newint", CTLFLAG_RW, &a_int, 0, "new int leaf");
      ...
     oidp = SYSCTL_ADD_NODE(&clist, SYSCTL_STATIC_CHILDREN(_debug),
             OID_AUTO, "newtree", CTLFLAG_RW, 0, "new tree under debug");
     oidp = SYSCTL_ADD_STRING(&clist, SYSCTL_CHILDREN(oidp),
             OID_AUTO, "newstring", CTLFLAG_RD, string, 0, "new string leaf");
      ...
     /* 今, OID を解放することができます */
     if (sysctl_ctx_free(&clist)) {
             printf("can't free this context - other OIDs depend on it");
             /* 訳注: このコンテキストを解放できません - 他の OID が依存しています */
             return (ENOTEMPTY);
     } else {
             printf("Success!\n");
             return (0);
     }

     この使用例は、次のサブツリーを作成します:

           debug.newtree.newstring
           newtree.newint

     最新のエントリ (葉) を解放することによって開始し、次により古いエントリ
     (この場合、ノード) を解放に進める、1 つの sysctl_ctx_free() 呼び出しを通
     して、両方のツリーが削除され、それらのリソースが解放されることに注意して
     ください。

関連項目
     queue(3), sysctl(8), sysctl(9), sysctl_add_oid(9), sysctl_remove_oid(9)

歴史
     これらの関数は、FreeBSD 4.2 ではじめて登場しました。

作者
     Andrzej Bialecki <abial@FreeBSD.org>

バグ
     現在の削除アルゴリズムは、いくらか重くなっています。最悪の場合に、すべて
     の OID は、登録を抹消され、再び登録され、次に登録を抹消され、削除される必
     要があります。しかしながら、アルゴリズムは、削除操作ためのトランザクショ
     ンのプロパティを保証します。

     コンテキストでのすべての操作は、リンクリストの横断を含んでいます。この理
     由のために、エントリの作成と削除は、比較的コストがかかります。

FreeBSD 13.2                     July 31, 2014                    FreeBSD 13.2

Table of Contents

FreeBSD マニュアル検索