.\" Copyright (c) 1993
.\" The Regents of the University of California. All rights reserved.
.\"
+.\" %%%LICENSE_START(BSD_4_CLAUSE_UCB)
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
+.\" %%%LICENSE_END
.\"
.\" @(#)queue.3 8.2 (Berkeley) 1/24/94
.\"
.\" hch, 2002-03-25
.\" 2007-12-08, mtk, Converted from mdoc to man macros
.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.\"
.\" Japanese Version Copyright (c) 2004 Yuichi SATO
.\" all rights reserved.
.\" Translated Thu Sep 2 04:41:11 JST 2004
.\" by Yuichi SATO <ysato444@yahoo.co.jp>
.\"
-.\"WORD: circular queue 循環キュー
-.\"
-.TH QUEUE 3 2007-12-28 "Linux" "Linux Programmer's Manual"
-.\"O .SH NAME
+.TH QUEUE 3 2007\-12\-28 Linux "Linux Programmer's Manual"
.SH 名前
-.\"O LIST_ENTRY, LIST_HEAD, LIST_INIT, LIST_INSERT_AFTER, \
-.\"O LIST_INSERT_HEAD, LIST_REMOVE, TAILQ_ENTRY, TAILQ_HEAD, \
-.\"O TAILQ_INIT, TAILQ_INSERT_AFTER, TAILQ_INSERT_HEAD, TAILQ_INSERT_TAIL, \
-.\"O TAILQ_REMOVE, CIRCLEQ_ENTRY, CIRCLEQ_HEAD, CIRCLEQ_INIT, \
-.\"O CIRCLEQ_INSERT_AFTER, CIRCLEQ_INSERT_BEFORE, \
-.\"O CIRCLEQ_INSERT_HEAD, CIRCLEQ_INSERT_TAIL, \
-.\"O CIRCLEQ_REMOVE \- implementations of lists, tail queues, and circular queues
-LIST_ENTRY, LIST_HEAD, LIST_INIT, LIST_INSERT_AFTER, \
-LIST_INSERT_HEAD, LIST_REMOVE, TAILQ_ENTRY, TAILQ_HEAD, \
-TAILQ_INIT, TAILQ_INSERT_AFTER, TAILQ_INSERT_HEAD, TAILQ_INSERT_TAIL, \
-TAILQ_REMOVE, CIRCLEQ_ENTRY, CIRCLEQ_HEAD, CIRCLEQ_INIT, \
-CIRCLEQ_INSERT_AFTER, CIRCLEQ_INSERT_BEFORE, \
-CIRCLEQ_INSERT_HEAD, CIRCLEQ_INSERT_TAIL, \
-CIRCLEQ_REMOVE \- リスト・テール (tail) キュー・循環キューの実装
-.\"Osato:
-.\"Osato: tail queue の良い訳語が分からないので、とりあえずカタカナにする。
-.\"Osato:
-.\"O .SH SYNOPSIS
+LIST_ENTRY, LIST_HEAD, LIST_INIT, LIST_INSERT_AFTER, LIST_INSERT_HEAD,
+LIST_REMOVE, TAILQ_ENTRY, TAILQ_HEAD, TAILQ_INIT, TAILQ_INSERT_AFTER,
+TAILQ_INSERT_HEAD, TAILQ_INSERT_TAIL, TAILQ_REMOVE, CIRCLEQ_ENTRY,
+CIRCLEQ_HEAD, CIRCLEQ_INIT, CIRCLEQ_INSERT_AFTER, CIRCLEQ_INSERT_BEFORE,
+CIRCLEQ_INSERT_HEAD, CIRCLEQ_INSERT_TAIL, CIRCLEQ_REMOVE \- リスト・テール (tail)
+キュー・循環キューの実装
.SH 書式
.nf
-.B #include <sys/queue.h>
+\fB#include <sys/queue.h>\fP
-.BI "LIST_ENTRY(" TYPE );
-.BI "LIST_HEAD(" HEADNAME ", " TYPE );
-.BI "LIST_INIT(LIST_HEAD *" head );
-.BI "LIST_INSERT_AFTER(LIST_ENTRY *" listelm ", "
-.BI " TYPE *" elm ", LIST_ENTRY " NAME );
-.BI "LIST_INSERT_HEAD(LIST_HEAD *" head ", "
-.BI " TYPE *" elm ", LIST_ENTRY " NAME );
-.BI "LIST_REMOVE(TYPE *" elm ", LIST_ENTRY " NAME );
+\fBLIST_ENTRY(\fP\fITYPE\fP\fB);\fP
+\fBLIST_HEAD(\fP\fIHEADNAME\fP\fB, \fP\fITYPE\fP\fB);\fP
+\fBLIST_INIT(LIST_HEAD *\fP\fIhead\fP\fB);\fP
+\fBLIST_INSERT_AFTER(LIST_ENTRY *\fP\fIlistelm\fP\fB, \fP
+\fB TYPE *\fP\fIelm\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP
+\fBLIST_INSERT_HEAD(LIST_HEAD *\fP\fIhead\fP\fB, \fP
+\fB TYPE *\fP\fIelm\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP
+\fBLIST_REMOVE(TYPE *\fP\fIelm\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP
-.BI "TAILQ_ENTRY(" TYPE );
-.BI "TAILQ_HEAD("HEADNAME ", " TYPE );
-.BI "TAILQ_INIT(TAILQ_HEAD *" head );
-.BI "TAILQ_INSERT_AFTER(TAILQ_HEAD *" head ", TYPE *" listelm ", "
-.BI " TYPE *" elm ", TAILQ_ENTRY " NAME );
-.BI "TAILQ_INSERT_HEAD(TAILQ_HEAD *" head ", "
-.BI " TYPE *" elm ", TAILQ_ENTRY " NAME );
-.BI "TAILQ_INSERT_TAIL(TAILQ_HEAD *" head ", "
-.BI " TYPE *" elm ", TAILQ_ENTRY " NAME );
-.BI "TAILQ_REMOVE(TAILQ_HEAD *" head ", TYPE *" elm ", TAILQ_ENTRY " NAME );
+\fBTAILQ_ENTRY(\fP\fITYPE\fP\fB);\fP
+\fBTAILQ_HEAD(\fP\fIHEADNAME\fP\fB, \fP\fITYPE\fP\fB);\fP
+\fBTAILQ_INIT(TAILQ_HEAD *\fP\fIhead\fP\fB);\fP
+\fBTAILQ_INSERT_AFTER(TAILQ_HEAD *\fP\fIhead\fP\fB, TYPE *\fP\fIlistelm\fP\fB, \fP
+\fB TYPE *\fP\fIelm\fP\fB, TAILQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBTAILQ_INSERT_HEAD(TAILQ_HEAD *\fP\fIhead\fP\fB, \fP
+\fB TYPE *\fP\fIelm\fP\fB, TAILQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBTAILQ_INSERT_TAIL(TAILQ_HEAD *\fP\fIhead\fP\fB, \fP
+\fB TYPE *\fP\fIelm\fP\fB, TAILQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBTAILQ_REMOVE(TAILQ_HEAD *\fP\fIhead\fP\fB, TYPE *\fP\fIelm\fP\fB, TAILQ_ENTRY \fP\fINAME\fP\fB);\fP
-.BI CIRCLEQ_ENTRY( TYPE );
-.BI "CIRCLEQ_HEAD(" HEADNAME ", " TYPE );
-.BI "CIRCLEQ_INIT(CIRCLEQ_HEAD *" head );
-.BI "CIRCLEQ_INSERT_AFTER(CIRCLEQ_HEAD *" head ", TYPE *" listelm ", "
-.BI " TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.BI "CIRCLEQ_INSERT_BEFORE(CIRCLEQ_HEAD *" head ", TYPE *" listelm ", "
-.BI " TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.BI "CIRCLEQ_INSERT_HEAD(CIRCLEQ_HEAD *" head ", "
-.BI " TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.BI "CIRCLEQ_INSERT_TAIL(CIRCLEQ_HEAD *" head ", "
-.BI " TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.BI "CIRCLEQ_REMOVE(CIRCLEQ_HEAD *" head ", "
-.BI " TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
+\fBCIRCLEQ_ENTRY(\fP\fITYPE\fP\fB);\fP
+\fBCIRCLEQ_HEAD(\fP\fIHEADNAME\fP\fB, \fP\fITYPE\fP\fB);\fP
+\fBCIRCLEQ_INIT(CIRCLEQ_HEAD *\fP\fIhead\fP\fB);\fP
+\fBCIRCLEQ_INSERT_AFTER(CIRCLEQ_HEAD *\fP\fIhead\fP\fB, TYPE *\fP\fIlistelm\fP\fB, \fP
+\fB TYPE *\fP\fIelm\fP\fB, CIRCLEQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBCIRCLEQ_INSERT_BEFORE(CIRCLEQ_HEAD *\fP\fIhead\fP\fB, TYPE *\fP\fIlistelm\fP\fB, \fP
+\fB TYPE *\fP\fIelm\fP\fB, CIRCLEQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBCIRCLEQ_INSERT_HEAD(CIRCLEQ_HEAD *\fP\fIhead\fP\fB, \fP
+\fB TYPE *\fP\fIelm\fP\fB, CIRCLEQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBCIRCLEQ_INSERT_TAIL(CIRCLEQ_HEAD *\fP\fIhead\fP\fB, \fP
+\fB TYPE *\fP\fIelm\fP\fB, CIRCLEQ_ENTRY \fP\fINAME\fP\fB);\fP
+\fBCIRCLEQ_REMOVE(CIRCLEQ_HEAD *\fP\fIhead\fP\fB, \fP
+\fB TYPE *\fP\fIelm\fP\fB, CIRCLEQ_ENTRY \fP\fINAME\fP\fB);\fP
.fi
-.\"O .SH DESCRIPTION
.SH 説明
-.\"O These macros define and operate on three types of data structures:
-.\"O lists, tail queues, and circular queues.
-.\"O All three structures support the following functionality:
-これらのマクロは、次の 3 つのデータ構造を定義して操作する:
-リスト・テールキュー・循環キュー。
-3 つのデータ構造すべてにおいて以下の機能がサポートされている:
+これらのマクロは、次の 3 つのデータ構造を定義して操作する: リスト・テールキュー・循環キュー。 3
+つのデータ構造すべてにおいて以下の機能がサポートされている:
.sp
.RS 4
.PD 0
.IP * 4
-.\"O Insertion of a new entry at the head of the list.
新たなエントリをリストの先頭に挿入する。
.IP *
-.\"O Insertion of a new entry after any element in the list.
新たなエントリをリストのどの要素よりも後に挿入する。
.IP *
-.\"O Removal of any entry in the list.
リストの任意のエントリを削除する。
.IP *
-.\"O Forward traversal through the list.
リストを順方向に辿る。
.PD
.RE
.PP
-.\"O Lists are the simplest of the three data structures and support
-.\"O only the above functionality.
-リストは 3 つのデータ構造の中で最も単純であり、
-上記の機能のみをサポートする。
+リストは 3 つのデータ構造の中で最も単純であり、 上記の機能のみをサポートする。
-.\"O Tail queues add the following functionality:
テールキューは以下の機能を追加する:
.RS 4
.IP * 4
-.\"O Entries can be added at the end of a list.
エントリをリストの最後に追加できる。
.RE
.PP
-.\"O However:
ただし:
.sp
.RS 4
.PD 0
.IP 1. 4
-.\"O All list insertions and removals must specify the head of the list.
全てのリスト挿入と削除において、リストの先頭を指定しなければならない。
.IP 2.
-.\"O Each head entry requires two pointers rather than one.
各先頭エントリは 1 つではなく 2 つのポインタを必要とする。
.IP 3.
-.\"O Code size is about 15% greater and operations run about 20% slower
-.\"O than lists.
リストと比べて、コードサイズは 15% 大きくなり、操作は 20% 遅くなる。
.PD
.RE
.PP
-.\"O Circular queues add the following functionality:
循環キューは以下の機能を追加する:
.sp
.RS 4
.PD 0
.IP * 4
-.\"O Entries can be added at the end of a list.
エントリをリストの最後に追加できる。
.IP *
-.\"O Entries can be added before another entry.
エントリを他のエントリの前に追加できる。
.IP *
-.\"O They may be traversed backward, from tail to head.
逆方向に末尾から先頭へ辿ることができる。
.PD
.RE
.PP
-.\"O However:
ただし:
.sp
.RS 4
.PD 0
.IP 1. 4
-.\"O All list insertions and removals must specify the head of the list.
全てのリスト挿入と削除において、リストの先頭を指定しなければならない。
.IP 2.
-.\"O Each head entry requires two pointers rather than one.
各先頭エントリは 1 つではなく 2 つのポインタを必要とする。
.IP 3.
-.\"O The termination condition for traversal is more complex.
辿る際の終了条件がより複雑である。
.IP 4.
-.\"O Code size is about 40% greater and operations run about 45% slower
-.\"O than lists.
リストと比べて、コードサイズは 40% 大きくなり、操作は 45% 遅くなる。
.PD
.RE
.PP
-.\"O In the macro definitions,
-.\"O .I TYPE
-.\"O is the name of a user-defined structure,
-.\"O that must contain a field of type
-.\"O .BR LIST_ENTRY ,
-.\"O .BR TAILQ_ENTRY ,
-.\"O or
-.\"O .BR CIRCLEQ_ENTRY ,
-.\"O named
-.\"O .IR NAME .
-マクロ定義において
-.I TYPE
-はユーザ定義構造体の名前であり、
-.BR LIST_ENTRY ,
-.BR TAILQ_ENTRY ,
-.BR CIRCLEQ_ENTRY
-の何れか型のフィールドと
-指定された
-.I NAME
-を含まなければならない。
-.\"O The argument
-.\"O .I HEADNAME
-.\"O is the name of a user-defined structure that must be declared
-.\"O using the macros
-.\"O .BR LIST_HEAD ,
-.\"O .BR TAILQ_HEAD ,
-.\"O or
-.\"O .BR CIRCLEQ_HEAD .
-引き数
-.I HEADNAME
-はユーザ定義構造体の名前であり、
-マクロ
-.BR LIST_HEAD ,
-.BR TAILQ_HEAD ,
-.BR CIRCLEQ_HEAD
-を用いて宣言されなければならない。
-.\"O See the examples below for further explanation of how these
-.\"O macros are used.
-これらのマクロがどのように使われるかについての更なる説明は、
-以下の例を参照すること。
-.\"O .SS LISTS
+マクロ定義において \fITYPE\fP はユーザ定義構造体の名前であり、 \fBLIST_ENTRY\fP, \fBTAILQ_ENTRY\fP,
+\fBCIRCLEQ_ENTRY\fP の何れか型のフィールドと 指定された \fINAME\fP を含まなければならない。 引き数 \fIHEADNAME\fP
+はユーザ定義構造体の名前であり、 マクロ \fBLIST_HEAD\fP, \fBTAILQ_HEAD\fP, \fBCIRCLEQ_HEAD\fP
+を用いて宣言されなければならない。 これらのマクロがどのように使われるかについての更なる説明は、 以下の例を参照すること。
.SS リスト
-.\"O A list is headed by a structure defined by the
-.\"O .B LIST_HEAD
-.\"O macro.
-リストの先頭には、
-.B LIST_HEAD
-マクロで定義される構造体が置かれる。
-.\"O This structure contains a single pointer to the first element
-.\"O on the list.
-この構造体はリストの最初の要素へのポインタを 1 つ含む。
-.\"O The elements are doubly linked so that an arbitrary element can be
-.\"O removed without traversing the list.
-要素は 2 重にリンクされており、
-任意の要素はリストを辿らずに削除できる。
-.\"O New elements can be added to the list after an existing element or
-.\"O at the head of the list.
-新しい要素は既存の要素の後またはリストの先頭に追加できる。
-.\"O A
-.\"O .B LIST_HEAD
-.\"O structure is declared as follows:
-.B LIST_HEAD
-構造体は以下のように宣言されている:
+リストの先頭には、 \fBLIST_HEAD\fP マクロで定義される構造体が置かれる。 この構造体はリストの最初の要素へのポインタを 1 つ含む。 要素は
+2 重にリンクされており、 任意の要素はリストを辿らずに削除できる。 新しい要素は既存の要素の後またはリストの先頭に追加できる。
+\fBLIST_HEAD\fP 構造体は以下のように宣言されている:
.in +4n
.nf
.fi
.in
.PP
-.\"O where
-.\"O .I HEADNAME
-.\"O is the name of the structure to be defined, and
-.\"O .I TYPE
-.\"O is the type of the elements to be linked into the list.
-ここで
-.I HEADNAME
-は定義される構造体の名前であり、
-.I TYPE
-はリンク内でリンクされる要素の型である。
-.\"O A pointer to the head of the list can later be declared as:
+ここで \fIHEADNAME\fP は定義される構造体の名前であり、 \fITYPE\fP はリンク内でリンクされる要素の型である。
リストの先頭へのポインタは、その後で次のように宣言される:
.in +4n
.nf
.fi
.in
.PP
-.\"O (The names
-.\"O .IR "head"
-.\"O and
-.\"O .IR "headp"
-.\"O are user selectable.)
-(名前
-.IR "head"
-と
-.IR "headp"
-はユーザが選択できる。)
+(名前 \fIhead\fP と \fIheadp\fP はユーザが選択できる。)
.PP
-.\"O The macro
-.\"O .B LIST_ENTRY
-.\"O declares a structure that connects the elements in
-.\"O the list.
-マクロ
-.B LIST_ENTRY
-はリストの要素を接続する構造体を宣言する。
+マクロ \fBLIST_ENTRY\fP はリストの要素を接続する構造体を宣言する。
.PP
-.\"O The macro
-.\"O .B LIST_INIT
-.\"O initializes the list referenced by
-.\"O .IR head .
-マクロ
-.B LIST_INIT
-は
-.I head
-で参照されるリストを初期化する。
+マクロ \fBLIST_INIT\fP は \fIhead\fP で参照されるリストを初期化する。
.PP
-.\"O The macro
-.\"O .B LIST_INSERT_HEAD
-.\"O inserts the new element
-.\"O .I elm
-.\"O at the head of the list.
-マクロ
-.B LIST_INSERT_HEAD
-は新たな要素
-.I elm
-をリストの先頭に挿入する。
+マクロ \fBLIST_INSERT_HEAD\fP は新たな要素 \fIelm\fP をリストの先頭に挿入する。
.PP
-.\"O The macro
-.\"O .B LIST_INSERT_AFTER
-.\"O inserts the new element
-.\"O .I elm
-.\"O after the element
-.\"O .I listelm .
-マクロ
-.B LIST_INSERT_AFTER
-は新たな要素
-.I elm
-を要素
-.I listelm
-の後に挿入する。
+マクロ \fBLIST_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の後に挿入する。
.PP
-.\"O The macro
-.\"O .B LIST_REMOVE
-.\"O removes the element
-.\"O .I elm
-.\"O from the list.
-マクロ
-.B LIST_REMOVE
-は要素
-.I elm
-をリストから削除する。
-.\"O .SS LIST EXAMPLE
+マクロ \fBLIST_REMOVE\fP は要素 \fIelm\fP をリストから削除する。
.SS リストの例
.nf
-
LIST_HEAD(listhead, entry) head;
-.\"O struct listhead *headp; /* List head. */
struct listhead *headp; /* リストの先頭。*/
struct entry {
-.\"O ...
-.\"O LIST_ENTRY(entry) entries; /* List. */
-.\"O ...
...
LIST_ENTRY(entry) entries; /* リスト。 */
...
} *n1, *n2, *np;
-.\"O LIST_INIT(&head); /* Initialize the list. */
LIST_INIT(&head); /* リストを初期化する。*/
-.\"O n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
n1 = malloc(sizeof(struct entry)); /* 先頭に挿入する。*/
LIST_INSERT_HEAD(&head, n1, entries);
-.\"O n2 = malloc(sizeof(struct entry)); /* Insert after. */
n2 = malloc(sizeof(struct entry)); /* 後ろに挿入する。*/
LIST_INSERT_AFTER(n1, n2, entries);
-.\"O /* Forward traversal. */
/* 順方向に辿る。*/
for (np = head.lh_first; np != NULL; np = np\->entries.le_next)
np\-> ...
-.\"O while (head.lh_first != NULL) /* Delete. */
+.\" FIXME . http://sourceware.org/bugzilla/show_bug.cgi?id=1506
while (head.lh_first != NULL) /* 削除する。*/
LIST_REMOVE(head.lh_first, entries);
.fi
-.\"O .SS Tail Queues
.SS テールキュー
-.\"O A tail queue is headed by a structure defined by the
-.\"O .B TAILQ_HEAD
-.\"O macro.
-テールキューの先頭には
-.B TAILQ_HEAD
-マクロで定義される構造体が置かれる。
-.\"O This structure contains a pair of pointers,
-.\"O one to the first element in the tail queue and the other to
-.\"O the last element in the tail queue.
-この構造体は 1 組のポインタを含んでいる。
-1 つはテールキューの最初の要素へのポインタであり、
-もう 1 つはテールキューの最後の要素へのポインタである。
-.\"O The elements are doubly linked so that an arbitrary element can be
-.\"O removed without traversing the tail queue.
-要素は 2 重にリンクされており、
-任意の要素はテールキューを辿らずに削除できる。
-.\"O New elements can be added to the tail queue after an existing element,
-.\"O at the head of the tail queue, or at the end of the tail queue.
-新しい要素は既存の要素の後またはテールキューの先頭または末尾に追加できる。
-.\"O A
-.\"O .B TAILQ_HEAD
-.\"O structure is declared as follows:
-.B TAILQ_HEAD
+テールキューの先頭には \fBTAILQ_HEAD\fP マクロで定義される構造体が置かれる。 この構造体は 1 組のポインタを含んでいる。 1
+つはテールキューの最初の要素へのポインタであり、 もう 1 つはテールキューの最後の要素へのポインタである。 要素は 2 重にリンクされており、
+任意の要素はテールキューを辿らずに削除できる。 新しい要素は既存の要素の後またはテールキューの先頭または末尾に追加できる。 \fBTAILQ_HEAD\fP
構造体は以下のように定義されている:
.in +4n
.nf
.fi
.in
.PP
-.\"O where
-.\"O .IR "HEADNAME"
-.\"O is the name of the structure to be defined, and
-.\"O .IR "TYPE"
-.\"O is the type of the elements to be linked into the tail queue.
-ここで
-.Li HEADNAME
-は定義される構造体の名前であり、
-.Li TYPE
-はテールキュー内でリンクされる要素の型である。
-.\"O A pointer to the head of the tail queue can later be declared as:
+ここで \fIHEADNAME\fP は定義される構造体の名前であり、 \fITYPE\fP はテールキュー内でリンクされる要素の型である。
テールキューの先頭へのポインタは、その後で次のように宣言される:
.in +4n
.nf
.fi
.in
.PP
-.\"O (The names
-.\"O .IR "head"
-.\"O and
-.\"O .IR "headp"
-.\"O are user selectable.)
-(名前
-.IR "head"
-と
-.IR "headp"
-はユーザが選択できる。)
+(名前 \fIhead\fP と \fIheadp\fP はユーザが選択できる。)
.PP
-.\"O The macro
-.\"O .B TAILQ_ENTRY
-.\"O declares a structure that connects the elements in
-.\"O the tail queue.
-マクロ
-.B TAILQ_ENTRY
-はテールキューの要素を接続する構造体を宣言する。
+マクロ \fBTAILQ_ENTRY\fP はテールキューの要素を接続する構造体を宣言する。
.PP
-.\"O The macro
-.\"O .B TAILQ_INIT
-.\"O initializes the tail queue referenced by
-.\"O .IR head .
-マクロ
-.B TAILQ_INIT
-は
-.I head
-で参照されるテールキューを初期化する。
+マクロ \fBTAILQ_INIT\fP は \fIhead\fP で参照されるテールキューを初期化する。
.PP
-.\"O The macro
-.\"O .B TAILQ_INSERT_HEAD
-.\"O inserts the new element
-.\"O .I elm
-.\"O at the head of the tail queue.
-マクロ
-.B TAILQ_INSERT_HEAD
-は新たな要素
-.I elm
-をテールキューの先頭に挿入する。
+マクロ \fBTAILQ_INSERT_HEAD\fP は新たな要素 \fIelm\fP をテールキューの先頭に挿入する。
.PP
-.\"O The macro
-.\"O .B TAILQ_INSERT_TAIL
-.\"O inserts the new element
-.\"O .I elm
-.\"O at the end of the tail queue.
-マクロ
-.B TAILQ_INSERT_TAIL
-は新たな要素
-.I elm
-をテールキューの末尾に挿入する。
+マクロ \fBTAILQ_INSERT_TAIL\fP は新たな要素 \fIelm\fP をテールキューの末尾に挿入する。
.PP
-.\"O The macro
-.\"O .B TAILQ_INSERT_AFTER
-.\"O inserts the new element
-.\"O .I elm
-.\"O after the element
-.\"O .I listelm .
-マクロ
-.B TAILQ_INSERT_AFTER
-は新たな要素
-.I elm
-を要素
-.Fa listelm
-の後に挿入する。
+マクロ \fBTAILQ_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の後に挿入する。
.PP
-.\"O The macro
-.\"O .B TAILQ_REMOVE
-.\"O removes the element
-.\"O .I elm
-.\"O from the tail queue.
-マクロ
-.B TAILQ_REMOVE
-は要素
-.I elm
-をテールキューから削除する。
-.\"O .SS Tail Queue Example
+マクロ \fBTAILQ_REMOVE\fP は要素 \fIelm\fP をテールキューから削除する。
.SS テールキューの例
.nf
-
TAILQ_HEAD(tailhead, entry) head;
-.\"O struct tailhead *headp; /* Tail queue head. */
struct tailhead *headp; /* テールキューの先頭。*/
struct entry {
...
-.\"O TAILQ_ENTRY(entry) entries; /* Tail queue. */
TAILQ_ENTRY(entry) entries; /* テールキュー。*/
...
} *n1, *n2, *np;
-.\"O TAILQ_INIT(&head); /* Initialize the queue. */
TAILQ_INIT(&head); /* キューを初期化する。*/
-.\"O n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
n1 = malloc(sizeof(struct entry)); /* 先頭に挿入する。*/
TAILQ_INSERT_HEAD(&head, n1, entries);
-.\"O n1 = malloc(sizeof(struct entry)); /* Insert at the tail. */
n1 = malloc(sizeof(struct entry)); /* 末尾に挿入する。*/
TAILQ_INSERT_TAIL(&head, n1, entries);
-.\"O n2 = malloc(sizeof(struct entry)); /* Insert after. */
n2 = malloc(sizeof(struct entry)); /* 後ろに挿入する。*/
TAILQ_INSERT_AFTER(&head, n1, n2, entries);
-.\"O /* Forward traversal. */
/* 順方向に辿る。*/
for (np = head.tqh_first; np != NULL; np = np\->entries.tqe_next)
np\-> ...
-.\"O /* Delete. */
/* 削除する。*/
while (head.tqh_first != NULL)
TAILQ_REMOVE(&head, head.tqh_first, entries);
.fi
-.\"O .SS Circular Queues
.SS 循環キュー
-.\"O A circular queue is headed by a structure defined by the
-.\"O .B CIRCLEQ_HEAD
-.\"O macro.
-循環キューの先頭には
-.B CIRCLEQ_HEAD
-マクロで定義される構造体が置かれる。
-.\"O This structure contains a pair of pointers,
-.\"O one to the first element in the circular queue and the other to the
-.\"O last element in the circular queue.
-この構造体は 1 組のポインタを含んでいる。
-1 つは循環キューの最初の要素へのポインタであり、
-もう 1 つは循環キューの最後の要素へのポインタである。
-.\"O The elements are doubly linked so that an arbitrary element can be
-.\"O removed without traversing the queue.
-要素は 2 重にリンクされており、
-任意の要素はキューを辿らずに削除できる。
-.\"O New elements can be added to the queue after an existing element,
-.\"O before an existing element, at the head of the queue, or at the end
-.\"O of the queue.
-新しい要素は、既存の要素の後または前、またはキューの先頭または末尾に追加できる。
-A
-.\"O .B CIRCLEQ_HEAD
-.\"O structure is declared as follows:
-.B CIRCLEQ_HEAD
-構造体は以下のように定義されている:
+循環キューの先頭には \fBCIRCLEQ_HEAD\fP マクロで定義される構造体が置かれる。 この構造体は 1 組のポインタを含んでいる。 1
+つは循環キューの最初の要素へのポインタであり、 もう 1 つは循環キューの最後の要素へのポインタである。 要素は 2 重にリンクされており、
+任意の要素はキューを辿らずに削除できる。 新しい要素は、既存の要素の後または前、またはキューの先頭または末尾に追加できる。 A
+\fBCIRCLEQ_HEAD\fP 構造体は以下のように定義されている:
.in +4n
.nf
.fi
.in
.PP
-.\"O where
-.\"O .IR "HEADNAME"
-.\"O is the name of the structure to be defined, and
-.\"O .IR "TYPE"
-.\"O is the type of the elements to be linked into the circular queue.
-ここで
-.IR "HEADNAME"
-は定義される構造体の名前であり、
-.IR "TYPE"
-は循環キュー内でリンクされる要素の型である。
-.\"O A pointer to the head of the circular queue can later be declared as:
+ここで \fIHEADNAME\fP は定義される構造体の名前であり、 \fITYPE\fP は循環キュー内でリンクされる要素の型である。
循環キューの先頭へのポインタは、その後で次のように宣言される:
.in +4n
.nf
.fi
.in
.PP
-.\"O (The names
-.\"O .IR "head"
-.\"O and
-.\"O .IR "headp"
-.\"O are user selectable.)
-(名前
-.I head
-と
-.I headp
-はユーザが選択できる。)
+(名前 \fIhead\fP と \fIheadp\fP はユーザが選択できる。)
.PP
-.\"O The macro
-.\"O .B CIRCLEQ_ENTRY
-.\"O declares a structure that connects the elements in
-.\"O the circular queue.
-マクロ
-.B CIRCLEQ_ENTRY
-は循環キューの要素を接続する構造体を宣言する。
+マクロ \fBCIRCLEQ_ENTRY\fP は循環キューの要素を接続する構造体を宣言する。
.PP
-.\"O The macro
-.\"O .B CIRCLEQ_INIT
-.\"O initializes the circular queue referenced by
-.\"O .IR head .
-マクロ
-.B CIRCLEQ_INIT
-は
-.I head
-で参照される循環キューを初期化する。
+マクロ \fBCIRCLEQ_INIT\fP は \fIhead\fP で参照される循環キューを初期化する。
.PP
-.\"O The macro
-.\"O .B CIRCLEQ_INSERT_HEAD
-.\"O inserts the new element
-.\"O .I elm
-.\"O at the head of the circular queue.
-マクロ
-.B CIRCLEQ_INSERT_HEAD
-は新たな要素
-.I elm
-を循環キューの先頭に挿入する。
+マクロ \fBCIRCLEQ_INSERT_HEAD\fP は新たな要素 \fIelm\fP を循環キューの先頭に挿入する。
.PP
-.\"O The macro
-.\"O .B CIRCLEQ_INSERT_TAIL
-.\"O inserts the new element
-.\"O .I elm
-.\"O at the end of the circular queue.
-マクロ
-.B CIRCLEQ_INSERT_TAIL
-は新たな要素
-.I elm
-を循環キューの末尾に挿入する。
+マクロ \fBCIRCLEQ_INSERT_TAIL\fP は新たな要素 \fIelm\fP を循環キューの末尾に挿入する。
.PP
-.\"O The macro
-.\"O .B CIRCLEQ_INSERT_AFTER
-.\"O inserts the new element
-.\"O .I elm
-.\"O after the element
-.\"O .IR listelm .
-マクロ
-.B CIRCLEQ_INSERT_AFTER
-は新たな要素
-.I elm
-を要素
-.I listelm
-の後に挿入する。
+マクロ \fBCIRCLEQ_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の後に挿入する。
.PP
-.\"O The macro
-.\"O .B CIRCLEQ_INSERT_BEFORE
-.\"O inserts the new element
-.\"O .I elm
-.\"O before the element
-.\"O .IR listelm .
-マクロ
-.B CIRCLEQ_INSERT_AFTER
-は新たな要素
-.I elm
-を要素
-.I listelm
-の前に挿入する。
+マクロ \fBCIRCLEQ_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の前に挿入する。
.PP
-.\"O The macro
-.\"O .B CIRCLEQ_REMOVE
-.\"O removes the element
-.\"O .I elm
-.\"O from the circular queue.
-マクロ
-.B CIRCLEQ_REMOVE
-は要素
-.I elm
-を循環キューから削除する。
-.\"O .SS Circular Queue Example
+マクロ \fBCIRCLEQ_REMOVE\fP は要素 \fIelm\fP を循環キューから削除する。
.SS 循環キューの例
.nf
-
CIRCLEQ_HEAD(circleq, entry) head;
-.\"O struct circleq *headp; /* Circular queue head. */
struct circleq *headp; /* 循環キューの先頭。*/
struct entry {
...
-.\"O CIRCLEQ_ENTRY(entry) entries; /* Circular queue. */
CIRCLEQ_ENTRY(entry) entries; /* 循環キュー。*/
...
} *n1, *n2, *np;
-.\"O CIRCLEQ_INIT(&head); /* Initialize the circular queue. */
CIRCLEQ_INIT(&head); /* 循環キューを初期化する。*/
-.\"O n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
n1 = malloc(sizeof(struct entry)); /* 先頭に挿入する。*/
CIRCLEQ_INSERT_HEAD(&head, n1, entries);
-.\"O n1 = malloc(sizeof(struct entry)); /* Insert at the tail. */
n1 = malloc(sizeof(struct entry)); /* 末尾に挿入する。*/
CIRCLEQ_INSERT_TAIL(&head, n1, entries);
-.\"O n2 = malloc(sizeof(struct entry)); /* Insert after. */
n2 = malloc(sizeof(struct entry)); /* 後ろに挿入する。*/
CIRCLEQ_INSERT_AFTER(&head, n1, n2, entries);
-.\"O n2 = malloc(sizeof(struct entry)); /* Insert before. */
n2 = malloc(sizeof(struct entry)); /* 前に挿入する。*/
CIRCLEQ_INSERT_BEFORE(&head, n1, n2, entries);
-.\"O /* Forward traversal. */
/* 順方向に辿る。*/
for (np = head.cqh_first; np != (void *)&head; np = np\->entries.cqe_next)
np\-> ...
-.\"O /* Reverse traversal. */
/* 逆方向に辿る。*/
for (np = head.cqh_last; np != (void *)&head; np = np\->entries.cqe_prev)
np\-> ...
-.\"O /* Delete. */
/* 削除する。*/
while (head.cqh_first != (void *)&head)
CIRCLEQ_REMOVE(&head, head.cqh_first, entries);
.fi
-.\"O .SH "CONFORMING TO"
.SH 準拠
-.\"O Not in POSIX.1-2001.
-.\"O Present on the BSDs.
-.\"O The
-.\"O queue functions first appeared in
-.\"O 4.4BSD.
-POSIX.1-2001 にはない。
-BSD 系に存在する。
-queue 関数は 4.4BSD で初めて登場した。
+POSIX.1\-2001 にはない。 BSD 系に存在する。 queue 関数は 4.4BSD で初めて登場した。
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。