OSDN Git Service

(split) LDP: Update the version to 3.53 in PO files
[linuxjm/LDP_man-pages.git] / release / man3 / queue.3
index 73c44dc..7b80aa1 100644 (file)
@@ -1,6 +1,7 @@
 .\" 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
 .\"
-.\" 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  ½Û´Ä¥­¥å¡¼
+.\" This file was generated with po4a. Translate the source file.
 .\"
-.TH QUEUE 3 2007-12-28 "Linux" "Linux Programmer's Manual"
-.SH Ì¾Á°
-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 ½ñ¼°
+.\"*******************************************************************
+.TH QUEUE 3 2007\-12\-28 Linux "Linux Programmer's Manual"
+.SH 名前
+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
-.SH ÀâÌÀ
-¤³¤ì¤é¤Î¥Þ¥¯¥í¤Ï¡¢¼¡¤Î 3 ¤Ä¤Î¥Ç¡¼¥¿¹½Â¤¤òÄêµÁ¤·¤ÆÁàºî¤¹¤ë:
-¥ê¥¹¥È¡¦¥Æ¡¼¥ë¥­¥å¡¼¡¦½Û´Ä¥­¥å¡¼¡£
-3 ¤Ä¤Î¥Ç¡¼¥¿¹½Â¤¤¹¤Ù¤Æ¤Ë¤ª¤¤¤Æ°Ê²¼¤Îµ¡Ç½¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë:
+.SH 説明
+これらのマクロは、次の 3 つのデータ構造を定義して操作する: リスト・テールキュー・循環キュー。 3
+つのデータ構造すべてにおいて以下の機能がサポートされている:
 .sp
 .RS 4
 .PD 0
 .IP * 4
-¿·¤¿¤Ê¥¨¥ó¥È¥ê¤ò¥ê¥¹¥È¤ÎÀèƬ¤ËÁÞÆþ¤¹¤ë¡£
+新たなエントリをリストの先頭に挿入する。
 .IP *
-¿·¤¿¤Ê¥¨¥ó¥È¥ê¤ò¥ê¥¹¥È¤Î¤É¤ÎÍ×ÁǤè¤ê¤â¸å¤ËÁÞÆþ¤¹¤ë¡£
+新たなエントリをリストのどの要素よりも後に挿入する。
 .IP *
-¥ê¥¹¥È¤ÎǤ°Õ¤Î¥¨¥ó¥È¥ê¤òºï½ü¤¹¤ë¡£
+リストの任意のエントリを削除する。
 .IP *
-¥ê¥¹¥È¤ò½çÊý¸þ¤Ëé¤ë¡£
+リストを順方向に辿る。
 .PD
 .RE
 .PP
-¥ê¥¹¥È¤Ï 3 ¤Ä¤Î¥Ç¡¼¥¿¹½Â¤¤ÎÃæ¤ÇºÇ¤âñ½ã¤Ç¤¢¤ê¡¢
-¾åµ­¤Îµ¡Ç½¤Î¤ß¤ò¥µ¥Ý¡¼¥È¤¹¤ë¡£
+リストは 3 つのデータ構造の中で最も単純であり、 上記の機能のみをサポートする。
 
-¥Æ¡¼¥ë¥­¥å¡¼¤Ï°Ê²¼¤Îµ¡Ç½¤òÄɲ乤ë:
+テールキューは以下の機能を追加する:
 .RS 4
 .IP * 4
-¥¨¥ó¥È¥ê¤ò¥ê¥¹¥È¤ÎºÇ¸å¤ËÄɲäǤ­¤ë¡£
+エントリをリストの最後に追加できる。
 .RE
 .PP
-¤¿¤À¤·:
+ただし:
 .sp
 .RS 4
 .PD 0
 .IP 1. 4
-Á´¤Æ¤Î¥ê¥¹¥ÈÁÞÆþ¤Èºï½ü¤Ë¤ª¤¤¤Æ¡¢¥ê¥¹¥È¤ÎÀèƬ¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+全てのリスト挿入と削除において、リストの先頭を指定しなければならない。
 .IP 2.
-³ÆÀèƬ¥¨¥ó¥È¥ê¤Ï 1 ¤Ä¤Ç¤Ï¤Ê¤¯ 2 ¤Ä¤Î¥Ý¥¤¥ó¥¿¤òɬÍפȤ¹¤ë¡£
+各先頭エントリは 1 つではなく 2 つのポインタを必要とする。
 .IP 3.
-¥ê¥¹¥È¤ÈÈæ¤Ù¤Æ¡¢¥³¡¼¥É¥µ¥¤¥º¤Ï 15% Â礭¤¯¤Ê¤ê¡¢Áàºî¤Ï 20% ÃÙ¤¯¤Ê¤ë¡£
+リストと比べて、コードサイズは 15% 大きくなり、操作は 20% 遅くなる。
 .PD
 .RE
 .PP
-½Û´Ä¥­¥å¡¼¤Ï°Ê²¼¤Îµ¡Ç½¤òÄɲ乤ë:
+循環キューは以下の機能を追加する:
 .sp
 .RS 4
 .PD 0
 .IP * 4
-¥¨¥ó¥È¥ê¤ò¥ê¥¹¥È¤ÎºÇ¸å¤ËÄɲäǤ­¤ë¡£
+エントリをリストの最後に追加できる。
 .IP *
-¥¨¥ó¥È¥ê¤ò¾¤Î¥¨¥ó¥È¥ê¤ÎÁ°¤ËÄɲäǤ­¤ë¡£
+エントリを他のエントリの前に追加できる。
 .IP *
-µÕÊý¸þ¤ËËöÈø¤«¤éÀèƬ¤Øé¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
+逆方向に末尾から先頭へ辿ることができる。
 .PD
 .RE
 .PP
-¤¿¤À¤·:
+ただし:
 .sp
 .RS 4
 .PD 0
 .IP 1. 4
-Á´¤Æ¤Î¥ê¥¹¥ÈÁÞÆþ¤Èºï½ü¤Ë¤ª¤¤¤Æ¡¢¥ê¥¹¥È¤ÎÀèƬ¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+全てのリスト挿入と削除において、リストの先頭を指定しなければならない。
 .IP 2.
-³ÆÀèƬ¥¨¥ó¥È¥ê¤Ï 1 ¤Ä¤Ç¤Ï¤Ê¤¯ 2 ¤Ä¤Î¥Ý¥¤¥ó¥¿¤òɬÍפȤ¹¤ë¡£
+各先頭エントリは 1 つではなく 2 つのポインタを必要とする。
 .IP 3.
-é¤ëºÝ¤Î½ªÎ»¾ò·ï¤¬¤è¤êÊ£»¨¤Ç¤¢¤ë¡£
+辿る際の終了条件がより複雑である。
 .IP 4.
-¥ê¥¹¥È¤ÈÈæ¤Ù¤Æ¡¢¥³¡¼¥É¥µ¥¤¥º¤Ï 40% Â礭¤¯¤Ê¤ê¡¢Áàºî¤Ï 45% ÃÙ¤¯¤Ê¤ë¡£
+リストと比べて、コードサイズは 40% 大きくなり、操作は 45% 遅くなる。
 .PD
 .RE
 .PP
-¥Þ¥¯¥íÄêµÁ¤Ë¤ª¤¤¤Æ
-.I TYPE
-¤Ï¥æ¡¼¥¶ÄêµÁ¹½Â¤ÂΤÎ̾Á°¤Ç¤¢¤ê¡¢
-.BR LIST_ENTRY ,
-.BR TAILQ_ENTRY ,
-.BR CIRCLEQ_ENTRY
-¤Î²¿¤ì¤«·¿¤Î¥Õ¥£¡¼¥ë¥É¤È
-»ØÄꤵ¤ì¤¿
-.I NAME
-¤ò´Þ¤Þ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-°ú¤­¿ô
-.I HEADNAME
-¤Ï¥æ¡¼¥¶ÄêµÁ¹½Â¤ÂΤÎ̾Á°¤Ç¤¢¤ê¡¢
-¥Þ¥¯¥í
-.BR LIST_HEAD ,
-.BR TAILQ_HEAD ,
-.BR CIRCLEQ_HEAD
-¤òÍѤ¤¤ÆÀë¸À¤µ¤ì¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-¤³¤ì¤é¤Î¥Þ¥¯¥í¤¬¤É¤Î¤è¤¦¤Ë»È¤ï¤ì¤ë¤«¤Ë¤Ä¤¤¤Æ¤Î¹¹¤Ê¤ëÀâÌÀ¤Ï¡¢
-°Ê²¼¤ÎÎã¤ò»²¾È¤¹¤ë¤³¤È¡£
-.SS ¥ê¥¹¥È
-¥ê¥¹¥È¤ÎÀèƬ¤Ë¤Ï¡¢
-.B LIST_HEAD
-¥Þ¥¯¥í¤ÇÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤ¬ÃÖ¤«¤ì¤ë¡£
-¤³¤Î¹½Â¤ÂΤϥꥹ¥È¤ÎºÇ½é¤ÎÍ×ÁǤؤΥݥ¤¥ó¥¿¤ò 1 ¤Ä´Þ¤à¡£
-Í×ÁǤϠ2 ½Å¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤ª¤ê¡¢
-Ǥ°Õ¤ÎÍ×ÁǤϥꥹ¥È¤òé¤é¤º¤Ëºï½ü¤Ç¤­¤ë¡£
-¿·¤·¤¤Í×ÁǤϴû¸¤ÎÍ×ÁǤθå¤Þ¤¿¤Ï¥ê¥¹¥È¤ÎÀèƬ¤ËÄɲäǤ­¤ë¡£
-.B LIST_HEAD
-¹½Â¤ÂΤϰʲ¼¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤Æ¤¤¤ë:
+マクロ定義において \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 リスト
+リストの先頭には、 \fBLIST_HEAD\fP マクロで定義される構造体が置かれる。 この構造体はリストの最初の要素へのポインタを 1 つ含む。 要素は
+2 重にリンクされており、 任意の要素はリストを辿らずに削除できる。 新しい要素は既存の要素の後またはリストの先頭に追加できる。
+\fBLIST_HEAD\fP 構造体は以下のように宣言されている:
 .in +4n
 .nf
 
@@ -193,12 +168,8 @@ LIST_HEAD(HEADNAME, TYPE) head;
 .fi
 .in
 .PP
-¤³¤³¤Ç
-.I HEADNAME
-¤ÏÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤÎ̾Á°¤Ç¤¢¤ê¡¢
-.I TYPE
-¤Ï¥ê¥ó¥¯Æâ¤Ç¥ê¥ó¥¯¤µ¤ì¤ëÍ×ÁǤη¿¤Ç¤¢¤ë¡£
-¥ê¥¹¥È¤ÎÀèƬ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢¤½¤Î¸å¤Ç¼¡¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤ë:
+ここで \fIHEADNAME\fP は定義される構造体の名前であり、 \fITYPE\fP はリンク内でリンクされる要素の型である。
+リストの先頭へのポインタは、その後で次のように宣言される:
 .in +4n
 .nf
 
@@ -206,78 +177,47 @@ struct HEADNAME *headp;
 .fi
 .in
 .PP
-(̾Á°
-.IR "head"
-¤È
-.IR "headp"
-¤Ï¥æ¡¼¥¶¤¬ÁªÂò¤Ç¤­¤ë¡£)
+(名前 \fIhead\fP と \fIheadp\fP はユーザが選択できる。)
 .PP
-¥Þ¥¯¥í
-.B LIST_ENTRY
-¤Ï¥ê¥¹¥È¤ÎÍ×ÁǤòÀܳ¤¹¤ë¹½Â¤ÂΤòÀë¸À¤¹¤ë¡£
+マクロ \fBLIST_ENTRY\fP はリストの要素を接続する構造体を宣言する。
 .PP
-¥Þ¥¯¥í
-.B LIST_INIT
-¤Ï
-.I head
-¤Ç»²¾È¤µ¤ì¤ë¥ê¥¹¥È¤ò½é´ü²½¤¹¤ë¡£
+マクロ \fBLIST_INIT\fP は \fIhead\fP で参照されるリストを初期化する。
 .PP
-¥Þ¥¯¥í
-.B LIST_INSERT_HEAD
-¤Ï¿·¤¿¤ÊÍ×ÁÇ
-.I elm
-¤ò¥ê¥¹¥È¤ÎÀèƬ¤ËÁÞÆþ¤¹¤ë¡£
+マクロ \fBLIST_INSERT_HEAD\fP は新たな要素 \fIelm\fP をリストの先頭に挿入する。
 .PP
-¥Þ¥¯¥í
-.B LIST_INSERT_AFTER
-¤Ï¿·¤¿¤ÊÍ×ÁÇ
-.I elm
-¤òÍ×ÁÇ
-.I listelm
-¤Î¸å¤ËÁÞÆþ¤¹¤ë¡£
+マクロ \fBLIST_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の後に挿入する。
 .PP
-¥Þ¥¯¥í
-.B LIST_REMOVE
-¤ÏÍ×ÁÇ
-.I elm
-¤ò¥ê¥¹¥È¤«¤éºï½ü¤¹¤ë¡£
-.SS ¥ê¥¹¥È¤ÎÎã
+マクロ \fBLIST_REMOVE\fP は要素 \fIelm\fP をリストから削除する。
+.SS リストの例
 .nf
-
 LIST_HEAD(listhead, entry) head;
-struct listhead *headp;                 /* ¥ê¥¹¥È¤ÎÀèƬ¡£*/
+struct listhead *headp;                 /* リストの先頭。*/
 struct entry {
     ...
-    LIST_ENTRY(entry) entries;          /* ¥ê¥¹¥È¡£ */
+    LIST_ENTRY(entry) entries;          /* リスト。 */
     ...
 } *n1, *n2, *np;
 
-LIST_INIT(&head);                       /* ¥ê¥¹¥È¤ò½é´ü²½¤¹¤ë¡£*/
+LIST_INIT(&head);                       /* リストを初期化する。*/
 
-n1 = malloc(sizeof(struct entry));      /* ÀèƬ¤ËÁÞÆþ¤¹¤ë¡£*/
+n1 = malloc(sizeof(struct entry));      /* 先頭に挿入する。*/
 LIST_INSERT_HEAD(&head, n1, entries);
 
-n2 = malloc(sizeof(struct entry));      /* ¸å¤í¤ËÁÞÆþ¤¹¤ë¡£*/
+n2 = malloc(sizeof(struct entry));      /* 後ろに挿入する。*/
 LIST_INSERT_AFTER(n1, n2, entries);
-                                        /* ½çÊý¸þ¤Ëé¤ë¡£*/
+                                        /* 順方向に辿る。*/
 for (np = head.lh_first; np != NULL; np = np\->entries.le_next)
     np\-> ...
 
-while (head.lh_first != NULL)           /* ºï½ü¤¹¤ë¡£*/
+.\" FIXME http://sourceware.org/bugzilla/show_bug.cgi?id=1506
+while (head.lh_first != NULL)           /* 削除する。*/
     LIST_REMOVE(head.lh_first, entries);
 .fi
-.SS ¥Æ¡¼¥ë¥­¥å¡¼
-¥Æ¡¼¥ë¥­¥å¡¼¤ÎÀèƬ¤Ë¤Ï
-.B TAILQ_HEAD
-¥Þ¥¯¥í¤ÇÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤ¬ÃÖ¤«¤ì¤ë¡£
-¤³¤Î¹½Â¤ÂΤϠ1 ÁȤΥݥ¤¥ó¥¿¤ò´Þ¤ó¤Ç¤¤¤ë¡£
-1 ¤Ä¤Ï¥Æ¡¼¥ë¥­¥å¡¼¤ÎºÇ½é¤ÎÍ×ÁǤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ê¡¢
-¤â¤¦ 1 ¤Ä¤Ï¥Æ¡¼¥ë¥­¥å¡¼¤ÎºÇ¸å¤ÎÍ×ÁǤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ë¡£
-Í×ÁǤϠ2 ½Å¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤ª¤ê¡¢
-Ǥ°Õ¤ÎÍ×ÁǤϥơ¼¥ë¥­¥å¡¼¤òé¤é¤º¤Ëºï½ü¤Ç¤­¤ë¡£
-¿·¤·¤¤Í×ÁǤϴû¸¤ÎÍ×ÁǤθå¤Þ¤¿¤Ï¥Æ¡¼¥ë¥­¥å¡¼¤ÎÀèƬ¤Þ¤¿¤ÏËöÈø¤ËÄɲäǤ­¤ë¡£
-.B TAILQ_HEAD
-¹½Â¤ÂΤϰʲ¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë:
+.SS テールキュー
+テールキューの先頭には \fBTAILQ_HEAD\fP マクロで定義される構造体が置かれる。 この構造体は 1 組のポインタを含んでいる。 1
+つはテールキューの最初の要素へのポインタであり、 もう 1 つはテールキューの最後の要素へのポインタである。 要素は 2 重にリンクされており、
+任意の要素はテールキューを辿らずに削除できる。 新しい要素は既存の要素の後またはテールキューの先頭または末尾に追加できる。 \fBTAILQ_HEAD\fP
+構造体は以下のように定義されている:
 .in +4n
 .nf
 
@@ -285,12 +225,8 @@ TAILQ_HEAD(HEADNAME, TYPE) head;
 .fi
 .in
 .PP
-¤³¤³¤Ç
-.Li HEADNAME
-¤ÏÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤÎ̾Á°¤Ç¤¢¤ê¡¢
-.Li TYPE
-¤Ï¥Æ¡¼¥ë¥­¥å¡¼Æâ¤Ç¥ê¥ó¥¯¤µ¤ì¤ëÍ×ÁǤη¿¤Ç¤¢¤ë¡£
-¥Æ¡¼¥ë¥­¥å¡¼¤ÎÀèƬ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢¤½¤Î¸å¤Ç¼¡¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤ë:
+ここで \fIHEADNAME\fP は定義される構造体の名前であり、 \fITYPE\fP はテールキュー内でリンクされる要素の型である。
+テールキューの先頭へのポインタは、その後で次のように宣言される:
 .in +4n
 .nf
 
@@ -298,88 +234,51 @@ struct HEADNAME *headp;
 .fi
 .in
 .PP
-(̾Á°
-.IR "head"
-¤È
-.IR "headp"
-¤Ï¥æ¡¼¥¶¤¬ÁªÂò¤Ç¤­¤ë¡£)
+(名前 \fIhead\fP と \fIheadp\fP はユーザが選択できる。)
 .PP
-¥Þ¥¯¥í
-.B TAILQ_ENTRY
-¤Ï¥Æ¡¼¥ë¥­¥å¡¼¤ÎÍ×ÁǤòÀܳ¤¹¤ë¹½Â¤ÂΤòÀë¸À¤¹¤ë¡£
+マクロ \fBTAILQ_ENTRY\fP はテールキューの要素を接続する構造体を宣言する。
 .PP
-¥Þ¥¯¥í
-.B TAILQ_INIT
-¤Ï
-.I head
-¤Ç»²¾È¤µ¤ì¤ë¥Æ¡¼¥ë¥­¥å¡¼¤ò½é´ü²½¤¹¤ë¡£
+マクロ \fBTAILQ_INIT\fP は \fIhead\fP で参照されるテールキューを初期化する。
 .PP
-¥Þ¥¯¥í
-.B TAILQ_INSERT_HEAD
-¤Ï¿·¤¿¤ÊÍ×ÁÇ
-.I elm
-¤ò¥Æ¡¼¥ë¥­¥å¡¼¤ÎÀèƬ¤ËÁÞÆþ¤¹¤ë¡£
+マクロ \fBTAILQ_INSERT_HEAD\fP は新たな要素 \fIelm\fP をテールキューの先頭に挿入する。
 .PP
-¥Þ¥¯¥í
-.B TAILQ_INSERT_TAIL
-¤Ï¿·¤¿¤ÊÍ×ÁÇ
-.I elm
-¤ò¥Æ¡¼¥ë¥­¥å¡¼¤ÎËöÈø¤ËÁÞÆþ¤¹¤ë¡£
+マクロ \fBTAILQ_INSERT_TAIL\fP は新たな要素 \fIelm\fP をテールキューの末尾に挿入する。
 .PP
-¥Þ¥¯¥í
-.B TAILQ_INSERT_AFTER
-¤Ï¿·¤¿¤ÊÍ×ÁÇ
-.I elm
-¤òÍ×ÁÇ
-.Fa listelm
-¤Î¸å¤ËÁÞÆþ¤¹¤ë¡£
+マクロ \fBTAILQ_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の後に挿入する。
 .PP
-¥Þ¥¯¥í
-.B TAILQ_REMOVE
-¤ÏÍ×ÁÇ
-.I elm
-¤ò¥Æ¡¼¥ë¥­¥å¡¼¤«¤éºï½ü¤¹¤ë¡£
-.SS ¥Æ¡¼¥ë¥­¥å¡¼¤ÎÎã
+マクロ \fBTAILQ_REMOVE\fP は要素 \fIelm\fP をテールキューから削除する。
+.SS テールキューの例
 .nf
-
 TAILQ_HEAD(tailhead, entry) head;
-struct tailhead *headp;                 /* ¥Æ¡¼¥ë¥­¥å¡¼¤ÎÀèƬ¡£*/
+struct tailhead *headp;                 /* テールキューの先頭。*/
 struct entry {
     ...
-    TAILQ_ENTRY(entry) entries;         /* ¥Æ¡¼¥ë¥­¥å¡¼¡£*/
+    TAILQ_ENTRY(entry) entries;         /* テールキュー。*/
     ...
 } *n1, *n2, *np;
 
-TAILQ_INIT(&head);                      /* ¥­¥å¡¼¤ò½é´ü²½¤¹¤ë¡£*/
+TAILQ_INIT(&head);                      /* キューを初期化する。*/
 
-n1 = malloc(sizeof(struct entry));      /* ÀèƬ¤ËÁÞÆþ¤¹¤ë¡£*/
+n1 = malloc(sizeof(struct entry));      /* 先頭に挿入する。*/
 TAILQ_INSERT_HEAD(&head, n1, entries);
 
-n1 = malloc(sizeof(struct entry));      /* ËöÈø¤ËÁÞÆþ¤¹¤ë¡£*/
+n1 = malloc(sizeof(struct entry));      /* 末尾に挿入する。*/
 TAILQ_INSERT_TAIL(&head, n1, entries);
 
-n2 = malloc(sizeof(struct entry));      /* ¸å¤í¤ËÁÞÆþ¤¹¤ë¡£*/
+n2 = malloc(sizeof(struct entry));      /* 後ろに挿入する。*/
 TAILQ_INSERT_AFTER(&head, n1, n2, entries);
-                                        /* ½çÊý¸þ¤Ëé¤ë¡£*/
+                                        /* 順方向に辿る。*/
 for (np = head.tqh_first; np != NULL; np = np\->entries.tqe_next)
     np\-> ...
-                                        /* ºï½ü¤¹¤ë¡£*/
+                                        /* 削除する。*/
 while (head.tqh_first != NULL)
     TAILQ_REMOVE(&head, head.tqh_first, entries);
 .fi
-.SS ½Û´Ä¥­¥å¡¼
-½Û´Ä¥­¥å¡¼¤ÎÀèƬ¤Ë¤Ï
-.B CIRCLEQ_HEAD
-¥Þ¥¯¥í¤ÇÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤ¬ÃÖ¤«¤ì¤ë¡£
-¤³¤Î¹½Â¤ÂΤϠ1 ÁȤΥݥ¤¥ó¥¿¤ò´Þ¤ó¤Ç¤¤¤ë¡£
-1 ¤Ä¤Ï½Û´Ä¥­¥å¡¼¤ÎºÇ½é¤ÎÍ×ÁǤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ê¡¢
-¤â¤¦ 1 ¤Ä¤Ï½Û´Ä¥­¥å¡¼¤ÎºÇ¸å¤ÎÍ×ÁǤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ë¡£
-Í×ÁǤϠ2 ½Å¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤ª¤ê¡¢
-Ǥ°Õ¤ÎÍ×ÁǤϥ­¥å¡¼¤òé¤é¤º¤Ëºï½ü¤Ç¤­¤ë¡£
-¿·¤·¤¤Í×ÁǤϡ¢´û¸¤ÎÍ×ÁǤθå¤Þ¤¿¤ÏÁ°¡¢¤Þ¤¿¤Ï¥­¥å¡¼¤ÎÀèƬ¤Þ¤¿¤ÏËöÈø¤ËÄɲäǤ­¤ë¡£
-A
-.B CIRCLEQ_HEAD
-¹½Â¤ÂΤϰʲ¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë:
+.SS 循環キュー
+循環キューの先頭には \fBCIRCLEQ_HEAD\fP マクロで定義される構造体が置かれる。 この構造体は 1 組のポインタを含んでいる。 1
+つは循環キューの最初の要素へのポインタであり、 もう 1 つは循環キューの最後の要素へのポインタである。 要素は 2 重にリンクされており、
+任意の要素はキューを辿らずに削除できる。 新しい要素は、既存の要素の後または前、またはキューの先頭または末尾に追加できる。 A
+\fBCIRCLEQ_HEAD\fP 構造体は以下のように定義されている:
 .in +4n
 .nf
 
@@ -387,12 +286,8 @@ CIRCLEQ_HEAD(HEADNAME, TYPE) head;
 .fi
 .in
 .PP
-¤³¤³¤Ç
-.IR "HEADNAME"
-¤ÏÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤÎ̾Á°¤Ç¤¢¤ê¡¢
-.IR "TYPE"
-¤Ï½Û´Ä¥­¥å¡¼Æâ¤Ç¥ê¥ó¥¯¤µ¤ì¤ëÍ×ÁǤη¿¤Ç¤¢¤ë¡£
-½Û´Ä¥­¥å¡¼¤ÎÀèƬ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢¤½¤Î¸å¤Ç¼¡¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤ë:
+ここで \fIHEADNAME\fP は定義される構造体の名前であり、 \fITYPE\fP は循環キュー内でリンクされる要素の型である。
+循環キューの先頭へのポインタは、その後で次のように宣言される:
 .in +4n
 .nf
 
@@ -400,90 +295,57 @@ struct HEADNAME *headp;
 .fi
 .in
 .PP
-(̾Á°
-.I head
-¤È
-.I headp
-¤Ï¥æ¡¼¥¶¤¬ÁªÂò¤Ç¤­¤ë¡£)
+(名前 \fIhead\fP と \fIheadp\fP はユーザが選択できる。)
 .PP
-¥Þ¥¯¥í
-.B CIRCLEQ_ENTRY
-¤Ï½Û´Ä¥­¥å¡¼¤ÎÍ×ÁǤòÀܳ¤¹¤ë¹½Â¤ÂΤòÀë¸À¤¹¤ë¡£
+マクロ \fBCIRCLEQ_ENTRY\fP は循環キューの要素を接続する構造体を宣言する。
 .PP
-¥Þ¥¯¥í
-.B CIRCLEQ_INIT
-¤Ï
-.I head
-¤Ç»²¾È¤µ¤ì¤ë½Û´Ä¥­¥å¡¼¤ò½é´ü²½¤¹¤ë¡£
+マクロ \fBCIRCLEQ_INIT\fP は \fIhead\fP で参照される循環キューを初期化する。
 .PP
-¥Þ¥¯¥í
-.B CIRCLEQ_INSERT_HEAD
-¤Ï¿·¤¿¤ÊÍ×ÁÇ
-.I elm
-¤ò½Û´Ä¥­¥å¡¼¤ÎÀèƬ¤ËÁÞÆþ¤¹¤ë¡£
+マクロ \fBCIRCLEQ_INSERT_HEAD\fP は新たな要素 \fIelm\fP を循環キューの先頭に挿入する。
 .PP
-¥Þ¥¯¥í
-.B CIRCLEQ_INSERT_TAIL
-¤Ï¿·¤¿¤ÊÍ×ÁÇ
-.I elm
-¤ò½Û´Ä¥­¥å¡¼¤ÎËöÈø¤ËÁÞÆþ¤¹¤ë¡£
+マクロ \fBCIRCLEQ_INSERT_TAIL\fP は新たな要素 \fIelm\fP を循環キューの末尾に挿入する。
 .PP
-¥Þ¥¯¥í
-.B CIRCLEQ_INSERT_AFTER
-¤Ï¿·¤¿¤ÊÍ×ÁÇ
-.I elm
-¤òÍ×ÁÇ
-.I listelm
-¤Î¸å¤ËÁÞÆþ¤¹¤ë¡£
+マクロ \fBCIRCLEQ_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の後に挿入する。
 .PP
-¥Þ¥¯¥í
-.B CIRCLEQ_INSERT_AFTER
-¤Ï¿·¤¿¤ÊÍ×ÁÇ
-.I elm
-¤òÍ×ÁÇ
-.I listelm
-¤ÎÁ°¤ËÁÞÆþ¤¹¤ë¡£
+マクロ \fBCIRCLEQ_INSERT_AFTER\fP は新たな要素 \fIelm\fP を要素 \fIlistelm\fP の前に挿入する。
 .PP
-¥Þ¥¯¥í
-.B CIRCLEQ_REMOVE
-¤ÏÍ×ÁÇ
-.I elm
-¤ò½Û´Ä¥­¥å¡¼¤«¤éºï½ü¤¹¤ë¡£
-.SS ½Û´Ä¥­¥å¡¼¤ÎÎã
+マクロ \fBCIRCLEQ_REMOVE\fP は要素 \fIelm\fP を循環キューから削除する。
+.SS 循環キューの例
 .nf
-
 CIRCLEQ_HEAD(circleq, entry) head;
-struct circleq *headp;                  /* ½Û´Ä¥­¥å¡¼¤ÎÀèƬ¡£*/
+struct circleq *headp;                  /* 循環キューの先頭。*/
 struct entry {
     ...
-    CIRCLEQ_ENTRY(entry) entries;       /* ½Û´Ä¥­¥å¡¼¡£*/
+    CIRCLEQ_ENTRY(entry) entries;       /* 循環キュー。*/
     ...
 } *n1, *n2, *np;
 
-CIRCLEQ_INIT(&head);                    /* ½Û´Ä¥­¥å¡¼¤ò½é´ü²½¤¹¤ë¡£*/
+CIRCLEQ_INIT(&head);                    /* 循環キューを初期化する。*/
 
-n1 = malloc(sizeof(struct entry));      /* ÀèƬ¤ËÁÞÆþ¤¹¤ë¡£*/
+n1 = malloc(sizeof(struct entry));      /* 先頭に挿入する。*/
 CIRCLEQ_INSERT_HEAD(&head, n1, entries);
 
-n1 = malloc(sizeof(struct entry));      /* ËöÈø¤ËÁÞÆþ¤¹¤ë¡£*/
+n1 = malloc(sizeof(struct entry));      /* 末尾に挿入する。*/
 CIRCLEQ_INSERT_TAIL(&head, n1, entries);
 
-n2 = malloc(sizeof(struct entry));      /* ¸å¤í¤ËÁÞÆþ¤¹¤ë¡£*/
+n2 = malloc(sizeof(struct entry));      /* 後ろに挿入する。*/
 CIRCLEQ_INSERT_AFTER(&head, n1, n2, entries);
 
-n2 = malloc(sizeof(struct entry));      /* Á°¤ËÁÞÆþ¤¹¤ë¡£*/
+n2 = malloc(sizeof(struct entry));      /* 前に挿入する。*/
 CIRCLEQ_INSERT_BEFORE(&head, n1, n2, entries);
-                                        /* ½çÊý¸þ¤Ëé¤ë¡£*/
+                                        /* 順方向に辿る。*/
 for (np = head.cqh_first; np != (void *)&head; np = np\->entries.cqe_next)
     np\-> ...
-                                        /* µÕÊý¸þ¤Ëé¤ë¡£*/
+                                        /* 逆方向に辿る。*/
 for (np = head.cqh_last; np != (void *)&head; np = np\->entries.cqe_prev)
     np\-> ...
-                                        /* ºï½ü¤¹¤ë¡£*/
+                                        /* 削除する。*/
 while (head.cqh_first != (void *)&head)
     CIRCLEQ_REMOVE(&head, head.cqh_first, entries);
 .fi
-.SH ½àµò
-POSIX.1-2001 ¤Ë¤Ï¤Ê¤¤¡£
-BSD ·Ï¤Ë¸ºß¤¹¤ë¡£
-queue ´Ø¿ô¤Ï 4.4BSD ¤Ç½é¤á¤ÆÅо줷¤¿¡£
+.SH 準拠
+POSIX.1\-2001 にはない。 BSD 系に存在する。 queue 関数は 4.4BSD で初めて登場した。
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。