Provided by: manpages-de-dev_0.10-1_all bug

BEZEICHNUNG

       hcreate, hdestroy, hsearch - hash table management

       Diese  Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
       die englischsprachige Handbuchseite zu Rate, indem Sie

              man -LC 3 hsearch

       eingeben.

"UBERSICHT

       #include <search.h>

       ENTRY *hsearch(ENTRY item, ACTION action);

       int     hcreate (unsigned nel);

       void    hdestroy (void);

BESCHREIBUNG

       Diese   drei   Funktionen  erlauben  dem  Anwender   eine   Hashtabelle
       anzulegen, die einen Schlussel  mit  irgendwelchen  Daten verbindet.

       Zuerst  muss  die  Tabelle  mit  hcreate() erzeugt werden.  nel ist die
       geschatzte GroBe der Tabelle.  hcreate() kann  diesen  Wert  nach  oben
       korrigieren,  um  die  Performance  des Algorithmus zu verbessern.  Die
       GNU-Implementierung  von   hsearch()   wird   die   Tabelle   ebenfalls
       verlangern,  wenn  sie  fast  voll  ist.   malloc(3) wird verwendet, um
       Speicherplatz zu alloziieren.

       Die entsprechende Funktion hdestroy() gibt den  Speicher  wieder  frei,
       der von der Hashtabelle belegt wurde, um so Platz fur eine neue Tabelle
       zu schaffen.

       item ist vom Typ ENTRY, der in <search.h> definiert wurde und  folgende
       Elemente enth"alt:

            typedef struct entry
              {
                char *key;
                char *data;
              } ENTRY;

       key   zeigt  auf  eine  null-terminierte  ASCII-Zeichenkette,  die  den
       Suchschlussel reprasentiert.  data zeigt auf das  Datum,  das  mit  dem
       Schlussel  verbunden  ist.   (Ein Zeiger auf einen anderen Typ als char
       sollte auf einen char * gecastet werden.)  hsearch() sucht nach item in
       der  Hashtabelle  und  gibt  bei  Erfolg  einen  Zeiger  darauf zuruck,
       ansonsten NULL.  action bestimmt, wie sich hsearch()  nach  erfolgloser
       Suche  verhalt.   Der  Wert  ENTER  bewirkt,  dass  item in die Tabelle
       eingefugt  wird,  wahrend  der  Wert  FIND   hsearch()   anweist   NULL
       zuruckzugeben.

R"UCKGABEWERT

       hcreate()  gibt  NULL  zuruck,  wenn  die Hashtabelle nicht erfolgreich
       angelegt werden konnte.

       hsearch() gibt NULL zuruck, wenn action ENTER ist und nicht ausreichend
       Speicher  zur  Verfugung  steht,  um die Hashtabelle zu erweitern, oder
       wenn action FIND ist und item nicht  in  der  Tabelle  gefunden  werden
       konnte.

KONFORM ZU

       SVID, auBer, dass die Tabelle bei SysV nicht wachsen kann.

FEHLER

       Diese  Implementierung  kann  nur  eine  Hashtabelle  zur gleichen Zeit
       verwalten.  Einzelne Eintrage konnen hinzugefugt, jedoch nicht geloscht
       werden.

BEISPIEL

       Das folgende Programm fugt 24 Eintrage in die Hashtabelle ein und zeigt
       dann einige.

           #include <stdio.h>
           #include <search.h>

           char *data[]={ "alpha", "bravo", "charley", "delta",
                "echo", "foxtrot", "golf", "hotel", "india", "juliette",
                "kilo", "lima", "mike", "november", "oscar", "papa",
                "quebec", "romeo", "sierra", "tango", "uniform",
                "victor", "whiskey", "x-ray", "yankee", "zulu"
            };

           int main()
           {
             ENTRY e, *ep;
             int i;

             /* Fang mit einer kleinen Tabelle an und laB sie wachsen */
             hcreate(3);
             for (i = 0; i < 24; i++)
               {
                 e.key = data[i];
                 /* Datum ist nur eine Ganzzahl anstelle eines Zeigers auf
                    irgendetwas */
                 e.data = (char *)i;
                 ep = hsearch(e, ENTER);
                 /* Es sollte keine Fehler geben */
                 if(ep == NULL) {fprintf(stderr, "entry failed\n"); exit(1);}
               }
             for (i = 22; i < 26; i++)
               /* Gib zwei Eintrage der Tabelle aus und zeige, dass zwei nicht
                  in der Tabelle enthalten sind */
               {
                 e.key = data[i];
                 ep = hsearch(e, FIND);
                 printf("%9.9s -> %9.9s:%d\n", e.key, ep?ep->key:"NULL",
                        ep?(int)(ep->data):0);
               }
             return 0;
           }

SIEHE AUCH

       bsearch(3), lsearch(3), tsearch(3), malloc(3).