OSDN Git Service

長音記号の修正を draft に反映
[linuxjm/LDP_man-pages.git] / draft / man3 / hsearch.3
index b81f588..f6228e2 100644 (file)
@@ -74,30 +74,30 @@ hcreate, hdestroy, hsearch, hcreate_r, hdestroy_r, hsearch_r \- ハッシュテ
 .fi
 .SH 説明
 \fBhcreate\fP(), \fBhsearch\fP(), \fBhdestroy\fP()  の 3 つの関数を利用すると、キー (文字列)
-と対応するデータから構成される エントリを格納できるハッシュ検索テーブルを作成、管理することができる。
\81¨å¯¾å¿\9cã\81\99ã\82\8bã\83\87ã\83¼ã\82¿ã\81\8bã\82\89æ§\8bæ\88\90ã\81\95ã\82\8cã\82\8b ã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\82\92æ ¼ç´\8dã\81§ã\81\8dã\82\8bã\83\8fã\83\83ã\82·ã\83¥æ¤\9cç´¢ã\83\86ã\83¼ã\83\96ã\83«ã\82\92ä½\9cæ\88\90ã\80\81管ç\90\86ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\82\8bã\80\82
 これらの関数を使って、一度に使用できるのは一つのハッシュテーブルだけである。
 
 \fBhcreate_r\fP(), \fBhsearch_r\fP(), \fBhdestroy_r\fP()  の 3
 つの関数はリエントラント版で、これらを利用すると、 一つのプログラムで同時に複数のハッシュテーブルを使うことができる。 最後の引き数 \fIhtab\fP
-は関数の操作対象となるテーブルを示す構造体へのポインタである。 プログラマはこの構造体をブラックボックスとして扱うべきである
\81¯é\96¢æ\95°ã\81®æ\93\8dä½\9c対象ã\81¨ã\81ªã\82\8bã\83\86ã\83¼ã\83\96ã\83«ã\82\92示ã\81\99æ§\8bé\80 ä½\93ã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\81§ã\81\82ã\82\8bã\80\82 ã\83\97ã\83­ã\82°ã\83©ã\83\9eã\81¯ã\81\93ã\81®æ§\8bé\80 ä½\93ã\82\92ã\83\96ã\83©ã\83\83ã\82¯ã\83\9cã\83\83ã\82¯ã\82¹ã\81¨ã\81\97ã\81¦æ\89±ã\81\86ã\81¹ã\81\8dã\81§ã\81\82ã\82\8b
 (つまり、この構造体のフィールドに直接アクセスしたり変更したり しないこと)。
 
 .\" e.g., in glibc it is raised to the next higher prime number
-最初に、 \fBhcreate\fP()  関数によってハッシュテーブルを作成しなければならない。 引き数 \fInel\fP でテーブルの最大エントリ数を指定する
-(この最大値は後で変更することはできないので、よく考えて選択すること)。 作成されるハッシュテーブルの性能を向上させるために、
-関数内部の実装によりこの値は増やされる場合もある。
+最初に、 \fBhcreate\fP()  関数によってハッシュテーブルを作成しなければならない。 引き数 \fInel\fP
+でテーブルの最大エントリー数を指定する (この最大値は後で変更することはできないので、よく考えて選択すること)。
+作成されるハッシュテーブルの性能を向上させるために、 関数内部の実装によりこの値は増やされる場合もある。
 
 \fBhcreate_r\fP()  関数は \fBhcreate\fP()  と同じ動作をするが、構造体 \fI*htab\fP
 で示されるテーブルを対象として動作する。 \fIhtab\fP が指し示す構造体は、 \fBhcreate_r\fP()  を初めて呼び出す前に 0
 で埋めておかなければならない。
 
-\fBhdestroy\fP()  関数は、 \fBhcreate\fP()  で作成されたハッシュテーブルが占有していたメモリを解放する。
-ハッシュテーブルによって占有されていたメモリを解放し、 新しいテーブルを作成できるようにする。 \fBhdestroy\fP()  を呼び出すと、その後は
+\fBhdestroy\fP()  é\96¢æ\95°ã\81¯ã\80\81 \fBhcreate\fP()  ã\81§ä½\9cæ\88\90ã\81\95ã\82\8cã\81\9fã\83\8fã\83\83ã\82·ã\83¥ã\83\86ã\83¼ã\83\96ã\83«ã\81\8cå\8d æ\9c\89ã\81\97ã\81¦ã\81\84ã\81\9fã\83¡ã\83¢ã\83ªã\83¼ã\82\92解æ\94¾ã\81\99ã\82\8bã\80\82
\83\8fã\83\83ã\82·ã\83¥ã\83\86ã\83¼ã\83\96ã\83«ã\81«ã\82\88ã\81£ã\81¦å\8d æ\9c\89ã\81\95ã\82\8cã\81¦ã\81\84ã\81\9fã\83¡ã\83¢ã\83ªã\83¼ã\82\92解æ\94¾ã\81\97ã\80\81 æ\96°ã\81\97ã\81\84ã\83\86ã\83¼ã\83\96ã\83«ã\82\92ä½\9cæ\88\90ã\81§ã\81\8dã\82\8bã\82\88ã\81\86ã\81«ã\81\99ã\82\8bã\80\82 \fBhdestroy\fP()  ã\82\92å\91¼ã\81³å\87ºã\81\99ã\81¨ã\80\81ã\81\9dã\81®å¾\8cã\81¯
 \fBhcreate\fP()  を使って新しいハッシュテーブルを作成することができる。 \fBhdestroy_r\fP()  関数は、同様の処理を、それ以前に
 \fBhcreate_r\fP()  を使って作成した \fI*htab\fP で示されるハッシュテーブルに対して実行する。
 
 \fBhsearch\fP()  関数は、\fIitem\fP と同じキーを持つ項目をハッシュテーブルから
-検索し、項目が見つかった場合にはその項目へのポインタを返す (「同じ」かどうかは \fBstrcmp\fP(3)  を使って判定する)。
+æ¤\9cç´¢ã\81\97ã\80\81é \85ç\9b®ã\81\8cè¦\8bã\81¤ã\81\8bã\81£ã\81\9få ´å\90\88ã\81«ã\81¯ã\81\9dã\81®é \85ç\9b®ã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\82\92è¿\94ã\81\99 (ã\80\8cå\90\8cã\81\98ã\80\8dã\81\8bã\81©ã\81\86ã\81\8bã\81¯ \fBstrcmp\fP(3)  ã\82\92使ã\81£ã\81¦å\88¤å®\9aã\81\99ã\82\8b\80\82
 
 引き数 \fIitem\fP は \fBENTRY\fP 型であり、\fI<search.h>\fP の中で 以下のように定義されている。
 .in +4n
@@ -114,20 +114,20 @@ typedef struct entry {
 
 検索が失敗した後の動作は、引き数 \fIaction\fP により決まる。 この引き数には \fBENTER\fP か \fBFIND\fP
 のいずれかの値を指定しなければならない。 \fBENTER\fP は \fIitem\fP のコピーを挿入することを
-(é\96¢æ\95°ã\81®çµ\90æ\9e\9cã\81¨ã\81\97ã\81¦æ\96°ã\81\97ã\81\84ã\83\8fã\83\83ã\82·ã\83¥ã\83\86ã\83¼ã\83\96ã\83«ã\82¨ã\83³ã\83\88ã\83ªã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿を返す)、 \fBFIND\fP は NULL を返すことを意味する (\fIaction\fP が
+(é\96¢æ\95°ã\81®çµ\90æ\9e\9cã\81¨ã\81\97ã\81¦æ\96°ã\81\97ã\81\84ã\83\8fã\83\83ã\82·ã\83¥ã\83\86ã\83¼ã\83\96ã\83«ã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼を返す)、 \fBFIND\fP は NULL を返すことを意味する (\fIaction\fP が
 \fBFIND\fP の場合、 \fIdata\fP は無視される)。
 
 \fBhsearch_r\fP()  関数は \fBhsearch\fP()  と同様だが、 \fI*htab\fP で示されるハッシュテーブルに対して処理を行う。
-\fBhsearch_r\fP()  関数が \fBhsearch\fP()  と異なるのは、見つかった項目へのポインタを、 関数の結果としてではなく、
+\fBhsearch_r\fP()  é\96¢æ\95°ã\81\8c \fBhsearch\fP()  ã\81¨ç\95°ã\81ªã\82\8bã\81®ã\81¯ã\80\81è¦\8bã\81¤ã\81\8bã\81£ã\81\9fé \85ç\9b®ã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\82\92ã\80\81 é\96¢æ\95°ã\81®çµ\90æ\9e\9cã\81¨ã\81\97ã\81¦ã\81§ã\81¯ã\81ªã\81\8fã\80\81
 \fI*retval\fP に格納して返す点である。
 .SH 返り値
 \fBhcreate\fP()  と \fBhcreate_r\fP()  は、成功した場合 0 以外の値を返す。 エラーの場合 0 を返し、 \fIerrno\fP
 にエラーの原因を示す値を設定する。
 
\88\90å\8a\9fã\81\99ã\82\8bã\81¨ã\80\81 \fBhsearch\fP()  ã\81¯ã\80\81ã\83\8fã\83\83ã\82·ã\83¥ã\83\86ã\83¼ã\83\96ã\83«å\86\85ã\81®ã\82¨ã\83³ã\83\88ã\83ªã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\82\92è¿\94ã\81\99ã\80\82 ã\82¨ã\83©ã\83¼ã\81®å ´å\90\88ã\80\81 \fBhsearch\fP()  ã\81¯ NULL
-を返す。 エラーとなるのは、 \fIaction\fP が \fBENTER\fP でハッシュテーブルがいっぱいの場合か、 \fIaction\fP が \fBFIND\fP
-で \fIitem\fP がハッシュテーブル内に 見つからない場合である。 \fBhsearch_r\fP()  は、成功すると 0 以外を返し、エラーの場合 0
-を返す。 エラーの場合、 これら二つの関数は \fIerrno\fP にエラーの原因を示す値を設定する。
\88\90å\8a\9fã\81\99ã\82\8bã\81¨ã\80\81 \fBhsearch\fP()  ã\81¯ã\80\81ã\83\8fã\83\83ã\82·ã\83¥ã\83\86ã\83¼ã\83\96ã\83«å\86\85ã\81®ã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\82\92è¿\94ã\81\99ã\80\82 ã\82¨ã\83©ã\83¼ã\81®å ´å\90\88ã\80\81 \fBhsearch\fP()  ã\81¯
+NULL を返す。 エラーとなるのは、 \fIaction\fP が \fBENTER\fP でハッシュテーブルがいっぱいの場合か、 \fIaction\fP が
+\fBFIND\fP で \fIitem\fP がハッシュテーブル内に 見つからない場合である。 \fBhsearch_r\fP()  は、成功すると 0
+以外を返し、エラーの場合 0 を返す。 エラーの場合、 これら二つの関数は \fIerrno\fP にエラーの原因を示す値を設定する。
 .SH エラー
 .LP
 \fBhcreate_r\fP()  と \fBhdestroy_r\fP()  は以下の理由で失敗する可能性がある。
@@ -138,7 +138,7 @@ typedef struct entry {
 \fBhsearch\fP()  と \fBhsearch_r\fP()  は以下の理由で失敗する可能性がある。
 .TP 
 \fBENOMEM\fP
-\fIaction\fP が \fBENTER\fP で、 \fIkey\fP がテーブル内に見つからず、 テーブルに新しいエントリを追加する余地がなかった。
+\fIaction\fP ã\81\8c \fBENTER\fP ã\81§ã\80\81 \fIkey\fP ã\81\8cã\83\86ã\83¼ã\83\96ã\83«å\86\85ã\81«è¦\8bã\81¤ã\81\8bã\82\89ã\81\9aã\80\81 ã\83\86ã\83¼ã\83\96ã\83«ã\81«æ\96°ã\81\97ã\81\84ã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\82\92追å\8a ã\81\99ã\82\8bä½\99å\9c°ã\81\8cã\81ªã\81\8bã\81£ã\81\9fã\80\82
 .TP 
 \fBESRCH\fP
 \fIaction\fP が \fBFIND\fP で、 \fIkey\fP がテーブル内に見つからなかった。
@@ -155,13 +155,13 @@ POSIX.1\-2001 が規定しているのは、エラー \fBENOMEM\fP だけであ
 に記述されている。 関数 \fBhcreate_r\fP, \fBhsearch_r\fP, \fBhdestroy_r\fP は GNU の拡張である。
 .SH 注意
 通常、ハッシュテーブルの実装は、衝突を最小限にするために テーブルに十分な空き領域がある場合に効率がよくなる。 このため、普通は、 \fInel\fP
-を、呼び出し側がテーブルに格納しようと思っている エントリの最大数より少なくとも 25% は大きな値にすべきである。
\82\92ã\80\81å\91¼ã\81³å\87ºã\81\97å\81´ã\81\8cã\83\86ã\83¼ã\83\96ã\83«ã\81«æ ¼ç´\8dã\81\97ã\82\88ã\81\86ã\81¨æ\80\9dã\81£ã\81¦ã\81\84ã\82\8b ã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\81®æ\9c\80大æ\95°ã\82\88ã\82\8aå°\91ã\81ªã\81\8fã\81¨ã\82\82 25% ã\81¯å¤§ã\81\8dã\81ªå\80¤ã\81«ã\81\99ã\81¹ã\81\8dã\81§ã\81\82ã\82\8bã\80\82
 
-\fBhdestroy\fP()  と \fBhdestroy_r\fP()  は、ハッシュテーブルのエントリの要素である \fIkey\fP と \fIdata\fP
\81\8cæ\8c\87ã\81\99ã\83\90ã\83\83ã\83\95ã\82¡ã\82\92解æ\94¾ã\81\97ã\81ªã\81\84 (ã\81\93ã\82\8cã\81\8cã\81§ã\81\8dã\81ªã\81\84ã\81®ã\81¯ã\80\81ã\81\93ã\82\8cã\82\89ã\81®ã\83\90ã\83\83ã\83\95ã\82¡が動的に割り当てられたのかを 知ることができないからである)。
\81\93ã\82\8cã\82\89ã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\82\92解æ\94¾ã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8bå ´å\90\88ã\80\81 ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81§ã\81¯ã\80\81ã\81\93ã\82\8cã\82\89ã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\82\92解æ\94¾ã\81§ã\81\8dã\82\8bã\82\88ã\81\86ã\81«ç®¡ç\90\86ç\94¨ã\81®ã\83\87ã\83¼ã\82¿æ§\8bé\80 ã\82\92 è¨­ã\81\91ã\81¦ã\80\81ã\81\93ã\82\8cã\82\92管ç\90\86ã\81\97ã\81ªã\81\91ã\82\8cã\81°ã\81ªã\82\89ã\81ªã\81\84
-(解放が必要となる理由は、たいていは、プログラム自身と生存期間が同じ ハッシュテーブルを一つだけ作成するのではなく、そのプログラムでは複数の
-ハッシュテーブルを繰り返して作成したり破棄したりするからであろう)。
+\fBhdestroy\fP()  ã\81¨ \fBhdestroy_r\fP()  ã\81¯ã\80\81ã\83\8fã\83\83ã\82·ã\83¥ã\83\86ã\83¼ã\83\96ã\83«ã\81®ã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\81®è¦\81ç´ ã\81§ã\81\82ã\82\8b \fIkey\fP ã\81¨ \fIdata\fP
\81\8cæ\8c\87ã\81\99ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\82\92解æ\94¾ã\81\97ã\81ªã\81\84 (ã\81\93ã\82\8cã\81\8cã\81§ã\81\8dã\81ªã\81\84ã\81®ã\81¯ã\80\81ã\81\93ã\82\8cã\82\89ã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼が動的に割り当てられたのかを 知ることができないからである)。
\81\93ã\82\8cã\82\89ã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\82\92解æ\94¾ã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8bå ´å\90\88ã\80\81 ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81§ã\81¯ã\80\81ã\81\93ã\82\8cã\82\89ã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\82\92解æ\94¾ã\81§ã\81\8dã\82\8bã\82\88ã\81\86ã\81«ç®¡ç\90\86ç\94¨ã\81®ã\83\87ã\83¼ã\82¿æ§\8bé\80 ã\82\92
+設けて、これを管理しなければならない (解放が必要となる理由は、たいていは、プログラム自身と生存期間が同じ
+ハッシュテーブルを一つだけ作成するのではなく、そのプログラムでは複数の ハッシュテーブルを繰り返して作成したり破棄したりするからであろう)。
 .SH バグ
 SVr4 と POSIX.1\-2001 の規定では、 \fIaction\fP は検索が失敗したときにだけ意味を持つとなっている。
 よって、検索が成功した場合、\fIaction\fP の値が \fBENTER\fP でも 何もすべきではない。 (バージョン 2.3 より前の) libc と
@@ -193,7 +193,7 @@ int main()
 
     for (i = 0; i < 24; i++) {
         e.key = data[i];
-        /* データは、ポインタではなく、単なる整数値である。 */
+        /* ã\83\87ã\83¼ã\82¿ã\81¯ã\80\81ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\81§ã\81¯ã\81ªã\81\8fã\80\81å\8d\98ã\81ªã\82\8bæ\95´æ\95°å\80¤ã\81§ã\81\82ã\82\8bã\80\82 */
         e.data = (void *) i;
         ep = hsearch(e, ENTER);
         /* エラーは起こらないはずである。 */
@@ -204,7 +204,7 @@ int main()
     }
 
     for (i = 22; i < 26; i++) {
-        /* テーブルにある 2 つのエントリを表示し、
+        /* ã\83\86ã\83¼ã\83\96ã\83«ã\81«ã\81\82ã\82\8b 2 ã\81¤ã\81®ã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\82\92表示ã\81\97ã\80\81
            あとの 2 つがテーブルにないことを示す。 */
         e.key = data[i];
         ep = hsearch(e, FIND);