OSDN Git Service

(split) LDP: Release pages for LDP v3.39.
[linuxjm/LDP_man-pages.git] / release / man3 / hsearch.3
index 76a8671..ebb47eb 100644 (file)
 .\" 2008-09-03, mtk, restructured somewhat, in part after suggestions from
 .\"     Timothy S. Nelson <wayland@wayland.id.au>
 .\"
-.\" Japanese Version Copyright (c) 1998 George Momma,
-.\"     Copyright (c) 2001-2005 Yuichi SATO,
-.\"     and Copyright (c) 2008 Akihiro MOTOKI
-.\" Translated 1998-05-23, George Momma <momma@wakhok.ac.jp>
-.\" Updated & Modified 2001-10-15, Yuichi SATO <ysato@h4.dion.ne.jp>
-.\" Updated & Modified 2002-01-03, Yuichi SATO
-.\" Updated & Modified 2004-01-17, Yuichi SATO <ysato444@yahoo.co.jp>
-.\" Updated & Modified 2005-01-10, Yuichi SATO
-.\" Updated 2008-09-20, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
+.\"*******************************************************************
 .\"
-.\"WORD:       hash table              ¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë
-.\"WORD:       entry                   ¥¨¥ó¥È¥ê¡¼
-.\"WORD:       allocate                ³ä¤êÅö¤Æ
-.\"WORD:       NUL-terminated          ¥Ì¥ëʸ»ú \0 ¤Ç½ªÃ¼¤µ¤ì¤¿
-.\"WORD:       pointer                 ¥Ý¥¤¥ó¥¿
-.\"WORD:       character               Ê¸»ú·¿
-.\"WORD:       item                    ¹àÌÜ
+.\" This file was generated with po4a. Translate the source file.
 .\"
-.TH HSEARCH 3 2008-10-06 "GNU" "Linux Programmer's Manual"
-.SH Ì¾Á°
-hcreate, hdestroy, hsearch, hcreate_r, hdestroy_r,
-hsearch_r \- ¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤Î´ÉÍý
-.SH ½ñ¼°
+.\"*******************************************************************
+.TH HSEARCH 3 2011\-09\-10 GNU "Linux Programmer's Manual"
+.SH 名前
+hcreate, hdestroy, hsearch, hcreate_r, hdestroy_r, hsearch_r \- ハッシュテーブルの管理
+.SH 書式
 .nf
-.B #include <search.h>
+\fB#include <search.h>\fP
 .sp
-.BI "int hcreate(size_t " nel );
+\fBint hcreate(size_t \fP\fInel\fP\fB);\fP
 .sp
-.BI "ENTRY *hsearch(ENTRY " item ", ACTION " action );
+\fBENTRY *hsearch(ENTRY \fP\fIitem\fP\fB, ACTION \fP\fIaction\fP\fB);\fP
 .sp
-.B "void hdestroy(void);"
+\fBvoid hdestroy(void);\fP
 .sp
-.BR "#define _GNU_SOURCE" "         /* feature_test_macros(7) »²¾È */"
+\fB#define _GNU_SOURCE\fP         /* feature_test_macros(7) 参照 */
 .br
-.B #include <search.h>
+\fB#include <search.h>\fP
 .sp
-.BI "int hcreate_r(size_t " nel ", struct hsearch_data *" htab );
+\fBint hcreate_r(size_t \fP\fInel\fP\fB, struct hsearch_data *\fP\fIhtab\fP\fB);\fP
 .sp
-.BI "int hsearch_r(ENTRY " item ", ACTION " action ", ENTRY **" retval ,
-.BI "              struct hsearch_data *" htab );
+\fBint hsearch_r(ENTRY \fP\fIitem\fP\fB, ACTION \fP\fIaction\fP\fB, ENTRY **\fP\fIretval\fP\fB,\fP
+\fB              struct hsearch_data *\fP\fIhtab\fP\fB);\fP
 .sp
-.BI "void hdestroy_r(struct hsearch_data *" htab );
+\fBvoid hdestroy_r(struct hsearch_data *\fP\fIhtab\fP\fB);\fP
 .fi
-.SH ÀâÌÀ
-.BR hcreate (),
-.BR hsearch (),
-.BR hdestroy ()
-¤Î 3 ¤Ä¤Î´Ø¿ô¤òÍøÍѤ¹¤ë¤È¡¢¥­¡¼ (ʸ»úÎó) ¤ÈÂбþ¤¹¤ë¥Ç¡¼¥¿¤«¤é¹½À®¤µ¤ì¤ë
-¥¨¥ó¥È¥ê¤ò³ÊǼ¤Ç¤­¤ë¥Ï¥Ã¥·¥å¸¡º÷¥Æ¡¼¥Ö¥ë¤òºîÀ®¡¢´ÉÍý¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
-¤³¤ì¤é¤Î´Ø¿ô¤ò»È¤Ã¤Æ¡¢°ìÅ٤˻ÈÍѤǤ­¤ë¤Î¤Ï°ì¤Ä¤Î¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤À¤±¤Ç¤¢¤ë¡£
+.SH 説明
+\fBhcreate\fP(), \fBhsearch\fP(), \fBhdestroy\fP()  の 3 つの関数を利用すると、キー (文字列)
+と対応するデータから構成される エントリを格納できるハッシュ検索テーブルを作成、管理することができる。
+これらの関数を使って、一度に使用できるのは一つのハッシュテーブルだけである。
 
-.BR hcreate_r (),
-.BR hsearch_r (),
-.BR hdestroy_r ()
-¤Î 3 ¤Ä¤Î´Ø¿ô¤Ï¥ê¥¨¥ó¥È¥é¥ó¥ÈÈǤǡ¢¤³¤ì¤é¤òÍøÍѤ¹¤ë¤È¡¢
-°ì¤Ä¤Î¥×¥í¥°¥é¥à¤ÇƱ»þ¤ËÊ£¿ô¤Î¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë¡£
-ºÇ¸å¤Î°ú¤­¿ô
-.I htab
-¤Ï´Ø¿ô¤ÎÁàºîÂоݤȤʤë¥Æ¡¼¥Ö¥ë¤ò¼¨¤¹¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ë¡£
-¥×¥í¥°¥é¥Þ¤Ï¤³¤Î¹½Â¤ÂΤò¥Ö¥é¥Ã¥¯¥Ü¥Ã¥¯¥¹¤È¤·¤Æ°·¤¦¤Ù¤­¤Ç¤¢¤ë
-(¤Ä¤Þ¤ê¡¢¤³¤Î¹½Â¤ÂΤΥե£¡¼¥ë¥É¤ËľÀÜ¥¢¥¯¥»¥¹¤·¤¿¤êÊѹ¹¤·¤¿¤ê
-¤·¤Ê¤¤¤³¤È)¡£
+\fBhcreate_r\fP(), \fBhsearch_r\fP(), \fBhdestroy_r\fP()  の 3
+つの関数はリエントラント版で、これらを利用すると、 一つのプログラムで同時に複数のハッシュテーブルを使うことができる。 最後の引き数 \fIhtab\fP
+は関数の操作対象となるテーブルを示す構造体へのポインタである。 プログラマはこの構造体をブラックボックスとして扱うべきである
+(つまり、この構造体のフィールドに直接アクセスしたり変更したり しないこと)。
 
-ºÇ½é¤Ë¡¢
-.BR hcreate ()
-´Ø¿ô¤Ë¤è¤Ã¤Æ¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤òºîÀ®¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-°ú¤­¿ô \fInel\fP ¤Ç¥Æ¡¼¥Ö¥ë¤ÎºÇÂ票¥ó¥È¥ê¿ô¤ò»ØÄꤹ¤ë
-(¤³¤ÎºÇÂçÃͤϸå¤ÇÊѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¤Î¤Ç¡¢¤è¤¯¹Í¤¨¤ÆÁªÂò¤¹¤ë¤³¤È)¡£
-ºîÀ®¤µ¤ì¤ë¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤ÎÀ­Ç½¤ò¸þ¾å¤µ¤»¤ë¤¿¤á¤Ë¡¢
-´Ø¿ôÆâÉô¤Î¼ÂÁõ¤Ë¤è¤ê¤³¤ÎÃͤÏÁý¤ä¤µ¤ì¤ë¾ì¹ç¤â¤¢¤ë¡£
 .\" e.g., in glibc it is raised to the next higher prime number
+最初に、 \fBhcreate\fP()  関数によってハッシュテーブルを作成しなければならない。 引き数 \fInel\fP でテーブルの最大エントリ数を指定する
+(この最大値は後で変更することはできないので、よく考えて選択すること)。 作成されるハッシュテーブルの性能を向上させるために、
+関数内部の実装によりこの値は増やされる場合もある。
 
-.BR hcreate_r ()
-´Ø¿ô¤Ï
-.BR hcreate ()
-¤ÈƱ¤¸Æ°ºî¤ò¤¹¤ë¤¬¡¢¹½Â¤ÂÎ
-.I *htab
-¤Ç¼¨¤µ¤ì¤ë¥Æ¡¼¥Ö¥ë¤òÂоݤȤ·¤ÆÆ°ºî¤¹¤ë¡£
-.I htab
-¤¬»Ø¤·¼¨¤¹¹½Â¤ÂΤϡ¢
-.BR hcreate_r ()
-¤ò½é¤á¤Æ¸Æ¤Ó½Ð¤¹Á°¤Ë 0 ¤ÇËä¤á¤Æ¤ª¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+\fBhcreate_r\fP()  関数は \fBhcreate\fP()  と同じ動作をするが、構造体 \fI*htab\fP
+で示されるテーブルを対象として動作する。 \fIhtab\fP が指し示す構造体は、 \fBhcreate_r\fP()  を初めて呼び出す前に 0
+で埋めておかなければならない。
 
-.BR hdestroy ()
-´Ø¿ô¤Ï¡¢
-.BR hcreate ()
-¤ÇºîÀ®¤µ¤ì¤¿¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤¬ÀêÍ­¤·¤Æ¤¤¤¿¥á¥â¥ê¤ò²òÊü¤¹¤ë¡£
-¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤Ë¤è¤Ã¤ÆÀêÍ­¤µ¤ì¤Æ¤¤¤¿¥á¥â¥ê¤ò²òÊü¤·¡¢
-¿·¤·¤¤¥Æ¡¼¥Ö¥ë¤òºîÀ®¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¡£
-.BR hdestroy ()
-¤ò¸Æ¤Ó½Ð¤¹¤È¡¢¤½¤Î¸å¤Ï
-.BR hcreate ()
-¤ò»È¤Ã¤Æ¿·¤·¤¤¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤òºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
-.BR hdestroy_r ()
-´Ø¿ô¤Ï¡¢Æ±ÍͤνèÍý¤ò¡¢¤½¤ì°ÊÁ°¤Ë
-.BR hcreate_r ()
-¤ò»È¤Ã¤ÆºîÀ®¤·¤¿
-.I *htab
-¤Ç¼¨¤µ¤ì¤ë¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤ËÂФ·¤Æ¼Â¹Ô¤¹¤ë¡£
+\fBhdestroy\fP()  関数は、 \fBhcreate\fP()  で作成されたハッシュテーブルが占有していたメモリを解放する。
+ハッシュテーブルによって占有されていたメモリを解放し、 新しいテーブルを作成できるようにする。 \fBhdestroy\fP()  を呼び出すと、その後は
+\fBhcreate\fP()  を使って新しいハッシュテーブルを作成することができる。 \fBhdestroy_r\fP()  関数は、同様の処理を、それ以前に
+\fBhcreate_r\fP()  を使って作成した \fI*htab\fP で示されるハッシュテーブルに対して実行する。
 
-.BR hsearch ()
-´Ø¿ô¤Ï¡¢\fIitem\fP ¤ÈƱ¤¸¥­¡¼¤ò»ý¤Ä¹àÌܤò¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤«¤é
-¸¡º÷¤·¡¢¹àÌܤ¬¸«¤Ä¤«¤Ã¤¿¾ì¹ç¤Ë¤Ï¤½¤Î¹àÌܤؤΥݥ¤¥ó¥¿¤òÊÖ¤¹
-(¡ÖƱ¤¸¡×¤«¤É¤¦¤«¤Ï
-.BR strcmp (3)
-¤ò»È¤Ã¤ÆȽÄꤹ¤ë)¡£
+\fBhsearch\fP()  関数は、\fIitem\fP と同じキーを持つ項目をハッシュテーブルから
+検索し、項目が見つかった場合にはその項目へのポインタを返す (「同じ」かどうかは \fBstrcmp\fP(3)  を使って判定する)。
 
-°ú¤­¿ô \fIitem\fP ¤Ï \fBENTRY\fP ·¿¤Ç¤¢¤ê¡¢\fI<search.h>\fP ¤ÎÃæ¤Ç
-°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£
+引き数 \fIitem\fP は \fBENTRY\fP 型であり、\fI<search.h>\fP の中で 以下のように定義されている。
 .in +4n
 .sp
 .nf
@@ -151,155 +99,60 @@ typedef struct entry {
 .in
 .fi
 .sp
-¥Õ¥£¡¼¥ë¥É \fIkey\fP ¤Ï¸¡º÷¥­¡¼¤È¤Ê¤ë NULL ½ªÃ¼¤µ¤ì¤¿Ê¸»úÎó¤ò»Ø¤¹¡£
-¥Õ¥£¡¼¥ë¥É \fIdata\fP ¤Ï¡¢¤³¤Î¥­¡¼¤ËÂбþ¤¹¤ë¥Ç¡¼¥¿¤ò»Ø¤¹¡£
-
-¸¡º÷¤¬¼ºÇÔ¤·¤¿¸å¤ÎÆ°ºî¤Ï¡¢°ú¤­¿ô \fIaction\fP ¤Ë¤è¤ê·è¤Þ¤ë¡£
-¤³¤Î°ú¤­¿ô¤Ë¤Ï
-.B ENTER
-¤«
-.B FIND
-¤Î¤¤¤º¤ì¤«¤ÎÃͤò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-.B ENTER
-¤Ï
-.I item
-¤Î¥³¥Ô¡¼¤òÁÞÆþ¤¹¤ë¤³¤È¤ò
-(´Ø¿ô¤Î·ë²Ì¤È¤·¤Æ¿·¤·¤¤¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¥¨¥ó¥È¥ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹)¡¢
-.B FIND
-¤Ï NULL ¤òÊÖ¤¹¤³¤È¤ò°ÕÌ£¤¹¤ë
-.RI ( action
-¤¬
-.B FIND
-¤Î¾ì¹ç¡¢
-.I data
-¤Ï̵»ë¤µ¤ì¤ë)¡£
-
-.BR hsearch_r ()
-´Ø¿ô¤Ï
-.BR hsearch ()
-¤ÈƱÍͤÀ¤¬¡¢
-.I *htab
-¤Ç¼¨¤µ¤ì¤ë¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤ËÂФ·¤Æ½èÍý¤ò¹Ô¤¦¡£
-.BR hsearch_r ()
-´Ø¿ô¤¬
-.BR hsearch ()
-¤È°Û¤Ê¤ë¤Î¤Ï¡¢¸«¤Ä¤«¤Ã¤¿¹àÌܤؤΥݥ¤¥ó¥¿¤ò¡¢
-´Ø¿ô¤Î·ë²Ì¤È¤·¤Æ¤Ç¤Ï¤Ê¤¯¡¢
-.I *retval
-¤Ë³ÊǼ¤·¤ÆÊÖ¤¹ÅÀ¤Ç¤¢¤ë¡£
-.SH ÊÖ¤êÃÍ
-.BR hcreate ()
-¤È
-.BR hcreate_r ()
-¤Ï¡¢À®¸ù¤·¤¿¾ì¹ç 0 °Ê³°¤ÎÃͤòÊÖ¤·¡¢
-¥¨¥é¡¼¤Î¾ì¹ç 0 ¤òÊÖ¤¹¡£
-
-À®¸ù¤¹¤ë¤È¡¢
-.BR hsearch ()
-¤Ï¡¢¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ëÆâ¤Î¥¨¥ó¥È¥ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£
-¥¨¥é¡¼¤Î¾ì¹ç¡¢
-.BR hsearch ()
-¤Ï NULL ¤òÊÖ¤¹¡£
-¥¨¥é¡¼¤È¤Ê¤ë¤Î¤Ï¡¢
-\fIaction\fP ¤¬ \fBENTER\fP ¤Ç¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤¬¤¤¤Ã¤Ñ¤¤¤Î¾ì¹ç¤«¡¢
-\fIaction\fP ¤¬ \fBFIND\fP ¤Ç \fIitem\fP ¤¬¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ëÆâ¤Ë
-¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç¤Ç¤¢¤ë¡£
-.BR hsearch_r ()
-¤Ï¡¢À®¸ù¤¹¤ë¤È 0 °Ê³°¤òÊÖ¤·¡¢¥¨¥é¡¼¤Î¾ì¹ç 0 ¤òÊÖ¤¹¡£
-.SH ¥¨¥é¡¼
+フィールド \fIkey\fP は検索キーとなる NULL 終端された文字列を指す。 フィールド \fIdata\fP は、このキーに対応するデータを指す。
+
+検索が失敗した後の動作は、引き数 \fIaction\fP により決まる。 この引き数には \fBENTER\fP か \fBFIND\fP
+のいずれかの値を指定しなければならない。 \fBENTER\fP は \fIitem\fP のコピーを挿入することを
+(関数の結果として新しいハッシュテーブルエントリへのポインタを返す)、 \fBFIND\fP は NULL を返すことを意味する (\fIaction\fP が
+\fBFIND\fP の場合、 \fIdata\fP は無視される)。
+
+\fBhsearch_r\fP()  関数は \fBhsearch\fP()  と同様だが、 \fI*htab\fP で示されるハッシュテーブルに対して処理を行う。
+\fBhsearch_r\fP()  関数が \fBhsearch\fP()  と異なるのは、見つかった項目へのポインタを、 関数の結果としてではなく、
+\fI*retval\fP に格納して返す点である。
+.SH 返り値
+\fBhcreate\fP()  と \fBhcreate_r\fP()  は、成功した場合 0 以外の値を返し、 エラーの場合 0 を返す。
+
+成功すると、 \fBhsearch\fP()  は、ハッシュテーブル内のエントリへのポインタを返す。 エラーの場合、 \fBhsearch\fP()  は NULL
+を返す。 エラーとなるのは、 \fIaction\fP が \fBENTER\fP でハッシュテーブルがいっぱいの場合か、 \fIaction\fP が \fBFIND\fP
+で \fIitem\fP がハッシュテーブル内に 見つからない場合である。 \fBhsearch_r\fP()  は、成功すると 0 以外を返し、エラーの場合 0
+を返す。
+.SH エラー
 .LP
-.BR hcreate ()
-¤È
-.BR hcreate_r ()
-¤Ï°Ê²¼¤ÎÍýͳ¤Ç¼ºÇÔ¤¹¤ë²ÄǽÀ­¤¬¤¢¤ë¡£
-.TP
-.B EINVAL
-.RB ( hcreate_r ())
-.I htab
-¤¬ NULL ¤Ç¤¢¤ë¡£
-.TP
-.B ENOMEM
-\fBENTER\fP ¤ËÀßÄꤵ¤ì¤¿ \fIaction\fP ¤Ç¡¢
-¥Æ¡¼¥Ö¥ë¤¬¤¤¤Ã¤Ñ¤¤¤Ë¤Ê¤Ã¤¿¡£
-.TP
-.B ESRCH
-\fIaction\fP °ú¤­¿ô¤¬ \fBFIND\fP ¤Ç¡¢
-¤«¤ÄÂбþ¤¹¤ëÍ×ÁǤ¬¥Æ¡¼¥Ö¥ë¤Ë¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¡£
-.\" hdestroy_r() ¤Ï 'tab' ¤¬ NULL ¤Î¾ì¹ç errno ¤Ë EINVAL ¤òÀßÄꤹ¤ë¾ì¹ç¤¬¤¢¤ë¡£
+\fBhcreate_r\fP()  と \fBhdestroy_r\fP()  は以下の理由で失敗する可能性がある。
+.TP 
+\fBEINVAL\fP
+\fIhtab\fP が NULL である。
 .PP
-.BR hsearch ()
-¤È
-.BR hsearch_r ()
-¤Ï°Ê²¼¤ÎÍýͳ¤Ç¼ºÇÔ¤¹¤ë²ÄǽÀ­¤¬¤¢¤ë¡£
-.TP
-.B ENOMEM
-.I action
-¤¬
-.B ENTER
-¤Ç¡¢
-.I key
-¤¬¥Æ¡¼¥Ö¥ëÆâ¤Ë¸«¤Ä¤«¤é¤º¡¢
-¥Æ¡¼¥Ö¥ë¤Ë¿·¤·¤¤¥¨¥ó¥È¥ê¤òÄɲ乤ë;ÃϤ¬¤Ê¤«¤Ã¤¿¡£
-.TP
-.B ESRCH
-.I action
-¤¬
-.B FIND
-¤Ç¡¢
-.I key
-¤¬¥Æ¡¼¥Ö¥ëÆâ¤Ë¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¡£
+\fBhsearch\fP()  と \fBhsearch_r\fP()  は以下の理由で失敗する可能性がある。
+.TP 
+\fBENOMEM\fP
+\fIaction\fP が \fBENTER\fP で、 \fIkey\fP がテーブル内に見つからず、 テーブルに新しいエントリを追加する余地がなかった。
+.TP 
+\fBESRCH\fP
+\fIaction\fP が \fBFIND\fP で、 \fIkey\fP がテーブル内に見つからなかった。
 .PP
-POSIX.1-2001 ¤¬µ¬Äꤷ¤Æ¤¤¤ë¤Î¤Ï¡¢¥¨¥é¡¼
-.B ENOMEM
-¤À¤±¤Ç¤¢¤ë¡£
-.SH ½àµò
-´Ø¿ô
-.BR hcreate (),
-.BR hsearch (),
-.BR hdestroy ()
-¤Ï SVr4 ¤«¤éƳÆþ¤µ¤ì¤¿¤â¤Î¤Ç¡¢POSIX.1-2001 ¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë¡£
-´Ø¿ô
-.BR hcreate_r ,
-.BR hsearch_r ,
-.B hdestroy_r
-¤Ï GNU ¤Î³ÈÄ¥¤Ç¤¢¤ë¡£
-.SH Ãí°Õ
-Ä̾¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤Î¼ÂÁõ¤Ï¡¢¾×ÆͤòºÇ¾®¸Â¤Ë¤¹¤ë¤¿¤á¤Ë
-¥Æ¡¼¥Ö¥ë¤Ë½½Ê¬¤Ê¶õ¤­Îΰ褬¤¢¤ë¾ì¹ç¤Ë¸úΨ¤¬¤è¤¯¤Ê¤ë¡£
-¤³¤Î¤¿¤á¡¢ÉáÄ̤ϡ¢
-.I nel
-¤ò¡¢¸Æ¤Ó½Ð¤·Â¦¤¬¥Æ¡¼¥Ö¥ë¤Ë³ÊǼ¤·¤è¤¦¤È»×¤Ã¤Æ¤¤¤ë
-¥¨¥ó¥È¥ê¤ÎºÇÂç¿ô¤è¤ê¾¯¤Ê¤¯¤È¤â 25% ¤ÏÂ礭¤ÊÃͤˤ¹¤Ù¤­¤Ç¤¢¤ë¡£
-
-.BR hdestroy ()
-¤È
-.BR hdestroy_r ()
-¤Ï¡¢¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤Î¥¨¥ó¥È¥ê¤ÎÍ×ÁǤǤ¢¤ë
-.I key
-¤È
-.I data
-¤¬»Ø¤¹¥Ð¥Ã¥Õ¥¡¤ò²òÊü¤·¤Ê¤¤
-(¤³¤ì¤¬¤Ç¤­¤Ê¤¤¤Î¤Ï¡¢¤³¤ì¤é¤Î¥Ð¥Ã¥Õ¥¡¤¬Æ°Åª¤Ë³ä¤êÅö¤Æ¤é¤ì¤¿¤Î¤«¤ò
-ÃΤ뤳¤È¤¬¤Ç¤­¤Ê¤¤¤«¤é¤Ç¤¢¤ë)¡£
-¤³¤ì¤é¤Î¥Ð¥Ã¥Õ¥¡¤ò²òÊü¤¹¤ëɬÍפ¬¤¢¤ë¾ì¹ç¡¢
-¥×¥í¥°¥é¥à¤Ç¤Ï¡¢¤³¤ì¤é¤Î¥Ð¥Ã¥Õ¥¡¤ò²òÊü¤Ç¤­¤ë¤è¤¦¤Ë´ÉÍýÍѤΥǡ¼¥¿¹½Â¤¤ò
-Àߤ±¤Æ¡¢¤³¤ì¤ò´ÉÍý¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤
-(²òÊü¤¬É¬ÍפȤʤëÍýͳ¤Ï¡¢¤¿¤¤¤Æ¤¤¤Ï¡¢¥×¥í¥°¥é¥à¼«¿È¤ÈÀ¸Â¸´ü´Ö¤¬Æ±¤¸
-¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤ò°ì¤Ä¤À¤±ºîÀ®¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢¤½¤Î¥×¥í¥°¥é¥à¤Ç¤ÏÊ£¿ô¤Î
-¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤ò·«¤êÊÖ¤·¤ÆºîÀ®¤·¤¿¤êÇË´þ¤·¤¿¤ê¤¹¤ë¤«¤é¤Ç¤¢¤í¤¦)¡£
-.SH ¥Ð¥°
-SVr4 ¤È POSIX.1-2001 ¤Îµ¬Äê¤Ç¤Ï¡¢
-\fIaction\fP ¤Ï¸¡º÷¤¬¼ºÇÔ¤·¤¿¤È¤­¤Ë¤À¤±°ÕÌ£¤ò»ý¤Ä¤È¤Ê¤Ã¤Æ¤¤¤ë¡£
-¤è¤Ã¤Æ¡¢¸¡º÷¤¬À®¸ù¤·¤¿¾ì¹ç¡¢\fIaction\fP ¤ÎÃͤ¬ \fBENTER\fP ¤Ç¤â
-²¿¤â¤¹¤Ù¤­¤Ç¤Ï¤Ê¤¤¡£
-(¥Ð¡¼¥¸¥ç¥ó 2.3 ¤è¤êÁ°¤Î) libc ¤È glibc ¤Î¼ÂÁõ¤Ï¤³¤Îµ¬³Ê¤Ë°ãÈ¿¤·¤Æ¤ª¤ê¡¢
-¤³¤Î¾õ¶·¤Ç¡¢»ØÄꤵ¤ì¤¿ \fIkey\fP ¤ËÂбþ¤¹¤ë \fIdata\fP ¤¬¹¹¿·¤µ¤ì¤ë¡£
-
-¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¥¨¥ó¥È¥ê¡¼¤ÎÄɲäϤǤ­¤ë¤¬¡¢ºï½ü¤¬¤Ç¤­¤Ê¤¤¡£
-.SH Îã
+POSIX.1\-2001 が規定しているのは、エラー \fBENOMEM\fP だけである。
+.SH 準拠
+関数 \fBhcreate\fP(), \fBhsearch\fP(), \fBhdestroy\fP()  は SVr4 から導入されたもので、POSIX.1\-2001
+に記述されている。 関数 \fBhcreate_r\fP, \fBhsearch_r\fP, \fBhdestroy_r\fP は GNU の拡張である。
+.SH 注意
+通常、ハッシュテーブルの実装は、衝突を最小限にするために テーブルに十分な空き領域がある場合に効率がよくなる。 このため、普通は、 \fInel\fP
+を、呼び出し側がテーブルに格納しようと思っている エントリの最大数より少なくとも 25% は大きな値にすべきである。
+
+\fBhdestroy\fP()  と \fBhdestroy_r\fP()  は、ハッシュテーブルのエントリの要素である \fIkey\fP と \fIdata\fP
+が指すバッファを解放しない (これができないのは、これらのバッファが動的に割り当てられたのかを 知ることができないからである)。
+これらのバッファを解放する必要がある場合、 プログラムでは、これらのバッファを解放できるように管理用のデータ構造を 設けて、これを管理しなければならない
+(解放が必要となる理由は、たいていは、プログラム自身と生存期間が同じ ハッシュテーブルを一つだけ作成するのではなく、そのプログラムでは複数の
+ハッシュテーブルを繰り返して作成したり破棄したりするからであろう)。
+.SH バグ
+SVr4 と POSIX.1\-2001 の規定では、 \fIaction\fP は検索が失敗したときにだけ意味を持つとなっている。
+よって、検索が成功した場合、\fIaction\fP の値が \fBENTER\fP でも 何もすべきではない。 (バージョン 2.3 より前の) libc と
+glibc の実装はこの規格に違反しており、 この状況で、指定された \fIkey\fP に対応する \fIdata\fP が更新される。
+
+ハッシュテーブルエントリーの追加はできるが、削除ができない。
+.SH 例
 .PP
-¼¡¤Î¥×¥í¥°¥é¥à¤Ï¡¢¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤Ë 24 ¸Ä¤Î¹àÌܤòÁÞÆþ¤·¡¢
-¤½¤ì¤«¤é¤½¤Î¤¦¤Á¤Î¤¤¤¯¤Ä¤«¤òɽ¼¨¤¹¤ë¡£
+次のプログラムは、ハッシュテーブルに 24 個の項目を挿入し、 それからそのうちのいくつかを表示する。
 .nf
 
 #include <stdio.h>
@@ -322,30 +175,27 @@ int main()
 
     for (i = 0; i < 24; i++) {
         e.key = data[i];
-        /* ¥Ç¡¼¥¿¤Ï¡¢¥Ý¥¤¥ó¥¿¤Ç¤Ï¤Ê¤¯¡¢Ã±¤Ê¤ëÀ°¿ôÃͤǤ¢¤ë¡£ */
+        /* データは、ポインタではなく、単なる整数値である。 */
         e.data = (void *) i;
         ep = hsearch(e, ENTER);
-        /* ¥¨¥é¡¼¤Ïµ¯¤³¤é¤Ê¤¤¤Ï¤º¤Ç¤¢¤ë¡£ */
+        /* エラーは起こらないはずである。 */
         if (ep == NULL) {
-            fprintf(stderr, "entry failed\\n");
+            fprintf(stderr, "entry failed\en");
             exit(EXIT_FAILURE);
         }
     }
 
     for (i = 22; i < 26; i++) {
-        /* ¥Æ¡¼¥Ö¥ë¤Ë¤¢¤ë 2 ¤Ä¤Î¥¨¥ó¥È¥ê¤òɽ¼¨¤·¡¢
-           ¤¢¤È¤Î 2 ¤Ä¤¬¥Æ¡¼¥Ö¥ë¤Ë¤Ê¤¤¤³¤È¤ò¼¨¤¹¡£ */
+        /* テーブルにある 2 つのエントリを表示し、
+           あとの 2 つがテーブルにないことを示す。 */
         e.key = data[i];
         ep = hsearch(e, FIND);
-        printf("%9.9s \-> %9.9s:%d\\n", e.key,
+        printf("%9.9s \-> %9.9s:%d\en", e.key,
                ep ? ep\->key : "NULL", ep ? (int)(ep\->data) : 0);
     }
     hdestroy();
     exit(EXIT_SUCCESS);
 }
 .fi
-.SH ´ØÏ¢¹àÌÜ
-.BR bsearch (3),
-.BR lsearch (3),
-.BR malloc (3),
-.BR tsearch (3)
+.SH 関連項目
+\fBbsearch\fP(3), \fBlsearch\fP(3), \fBmalloc\fP(3), \fBtsearch\fP(3)