Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

bsearch(3)

lsearch(3)

tsearch(3)

qsort(3)

hsearch(3)  —  Subroutines

NAME

hsearch, hcreate, hdestroy, hsearch_r, hcreate_r, hdestroy_r − Manage hash tables

LIBRARY

Standard C Library (libc.a)

SYNOPSIS

#include <search.h>
ENTRY ∗hsearch(
ENTRY item,
ACTION action);
int hsearch_r(
ENTRY item,
ACTION action,
ENTRY ∗∗target,
struct hsearch_data ∗hsearch_data);
int hcreate(
size_t nel);
int hcreate_r(
size_t nel,
struct hsearch_data ∗hsearch_data);
void hdestroy(void);
void hdestroy_r(
struct hsearch_data ∗hsearch_data);

PARAMETERS

itemIdentifies a structure of the type ENTRY as defined in the search.h header file. It contains two pointers:

char ∗keyPoints to the comparison key string. 

char ∗dataPoints to any other data associated with the char ∗key parameter. 

Pointers to types other than char should be cast as char ∗. 

actionSpecifies a value for an ACTION enum type, which indicates what is to be done with an item  key  when it cannot be found in the hash table.  The following two actions can be specified for this parameter:

ENTEREnter the key specified by the item parameter into the hash table at the appropriate place.  When the table is full, a null pointer is returned. 

FINDDo not enter the item key into the table, but return a null pointer when an item key cannot be found in the hash table. 

nelSpecifies an estimate of the maximum number of entries that the hash table will contain. Under some circumstances, the hcreate() function may make the hash table larger than specified, to obtain mathematically favorable conditions for access to the hash table. 

targetPoints to the item actually found. 

hsearch_dataIs data for the hash table. 

DESCRIPTION

The hcreate() function initializes the hash table. You must call the hcreate() function before calling the hsearch() function. 

The hsearch(), hcreate() and hdestroy() functions are used to manage hash table operations. 

The hsearch() function searches a hash table.  It returns a pointer into a hash table that indicates where a given entry can be found. The hsearch() function uses open addressing with a hash function. 

The hdestroy() function deletes the hash table. This allows you to start a new hash table because only one table may be active at a time. After the call to hdestroy() the hash table data should no longer be considered accessible. 

The hsearch_r(), hcreate_r(), and hdestroy_r() functions are the reentrant versions of hsearch(), hcreate(), and hdestroy(). 

NOTES

The reentrant functions allow different threads to manage different hash tables (using the hsearch_data data structure).  If several threads want to use the same hash table, they must perform their own synchronization. 

AES Support Level:
Trial use.

RETURN VALUES

The hsearch() function returns a null pointer when the action parameter is FIND and the key pointed to by item cannot be found, or when the specified action is ENTER and the hash table is full. 

Upon successful completion, the hcreate() function returns a nonzero value.  Otherwise, when sufficient space for the table cannot be allocated, the hcreate() function returns a value of 0 (zero). 

The hcreate_r() function returns the exact same values as its nonreentrant version. 

Upon successful completion, the hsearch_r() function returns 0 (zero).  Upon failure, it returns -1 and sets errno. 

ERRORS

If any of the following conditions occurs, the hsearch() function sets errno to the corresponding value:

[ENOMEM]The table is full. 

[ESRCH]The search failed. 

RELATED INFORMATION

Functions: bsearch(3), lsearch(3), tsearch(3), qsort(3). 

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026