| Skip Navigation Links | |
| Exit Print View | |
![]() | man pages section 3: Basic Library Functions Oracle Solaris 11 Information Library |
enable_extended_FILE_stdio(3C)
posix_spawnattr_getschedparam(3C)
posix_spawnattr_getschedpolicy(3C)
posix_spawnattr_getsigdefault(3C)
posix_spawnattr_getsigignore_np(3C)
posix_spawnattr_getsigmask(3C)
posix_spawnattr_setschedparam(3C)
posix_spawnattr_setschedpolicy(3C)
posix_spawnattr_setsigdefault(3C)
posix_spawnattr_setsigignore_np(3C)
posix_spawnattr_setsigmask(3C)
posix_spawn_file_actions_addclose(3C)
posix_spawn_file_actions_addclosefrom_np(3C)
posix_spawn_file_actions_adddup2(3C)
posix_spawn_file_actions_addopen(3C)
posix_spawn_file_actions_destroy(3C)
posix_spawn_file_actions_init(3C)
pthread_attr_getdetachstate(3C)
pthread_attr_getinheritsched(3C)
pthread_attr_getschedparam(3C)
pthread_attr_getschedpolicy(3C)
pthread_attr_setdetachstate(3C)
pthread_attr_setinheritsched(3C)
pthread_attr_setschedparam(3C)
pthread_attr_setschedpolicy(3C)
pthread_barrierattr_destroy(3C)
pthread_barrierattr_getpshared(3C)
pthread_barrierattr_setpshared(3C)
pthread_condattr_getpshared(3C)
pthread_condattr_setpshared(3C)
pthread_cond_reltimedwait_np(3C)
pthread_key_create_once_np(3C)
pthread_mutexattr_getprioceiling(3C)
pthread_mutexattr_getprotocol(3C)
pthread_mutexattr_getpshared(3C)
pthread_mutexattr_getrobust(3C)
pthread_mutexattr_setprioceiling(3C)
pthread_mutexattr_setprotocol(3C)
pthread_mutexattr_setpshared(3C)
pthread_mutexattr_setrobust(3C)
pthread_mutex_getprioceiling(3C)
pthread_mutex_reltimedlock_np(3C)
pthread_mutex_setprioceiling(3C)
pthread_rwlockattr_destroy(3C)
pthread_rwlockattr_getpshared(3C)
pthread_rwlockattr_setpshared(3C)
pthread_rwlock_reltimedrdlock_np(3C)
pthread_rwlock_reltimedwrlock_np(3C)
pthread_rwlock_timedrdlock(3C)
pthread_rwlock_timedwrlock(3C)
rctlblk_get_enforced_value(3C)
- linear search and update
#include <search.h>void *lsearch(const void *key,void *base,size_t *nelp,size_twidth,int (*compar)(const void *,const void *));
void *lfind(const void *key,const void *base,size_t *nelp,size_twidth,int (*compar)(const void *,const void *));
Thelsearch() function is a linear search routine generalized from Knuth (6.1)Algorithm S. (seeThe Art of Computer Programming, Volume 3, Section 6.1, by Donald E. Knuth.). It returns a pointer to a table indicatingwhere a datum can be found. If the datum does not occur, itis added at the end of the table. Thekey argument pointsto the datum to be sought in the table. Thebase argumentpoints to the first element in the table. Thenelp argument pointsto an integer containing the current number of elements in the table.The integer is incremented if the datum is added to the table.Thewidth argument is the size of an element in bytes. Thecompar argument is a pointer to the comparison function that the user mustsupply (strcmp(3C) for example). It is called with two arguments that pointto the elements being compared. The function must return zero if theelements are equal and non-zero otherwise.
Thelfind() function is the same aslsearch() except that if thedatum is not found, it is not added to the table. Instead, a null pointer is returned.
It is important to note the following:
The pointers to the key and the element at the base of the table can be pointers to any type.
The comparison function need not compare every byte, so arbitrary data can be contained in the elements in addition to the values being compared.
The value returned should be cast into type pointer-to-element.
If the searched-for datum is found, bothlsearch() andlfind() returna pointer to it. Otherwise,lfind() returnsNULL andlsearch() returnsa pointer to the newly added element.
Undefined results can occur if there is not enough room in thetable to add a new item.
Thelsearch() andlfind() functions safely allows concurrent access by multiple threadsto disjoint data, such as overlapping subtrees or tables.
Example 1 A sample code using thelsearch() function.
This program will read in less thanTABSIZE strings of length lessthanELSIZE and store them in a table, eliminating duplicates, and thenwill print each entry.
#include <search.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#define TABSIZE 50#define ELSIZE 120main(){ char line[ELSIZE]; /* buffer to hold input string */ char tab[TABSIZE][ELSIZE]; /* table of strings */ size_t nel = 0; /* number of entries in tab */ int i; while (fgets(line, ELSIZE, stdin) != NULL && nel < TABSIZE) (void) lsearch(line, tab, &nel, ELSIZE, mycmp); for( i = 0; i < nel; i++ ) (void)fputs(tab[i], stdout); return 0;}Seeattributes(5) for descriptions of the following attributes:
|
bsearch(3C),hsearch(3C),string(3C),tsearch(3C),attributes(5),standards(5)
The Art of Computer Programming, Volume 3, Sorting and Searching by Donald E. Knuth, published by Addison-Wesley Publishing Company, 1973.
Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Legal Notices | ![]() ![]() |