JavaScript is required to for searching.
Skip Navigation Links
Exit Print View
man pages section 3: Basic Library Functions
Oracle Technology Network
Library
PDF
Print View
Feedback
search filter icon
search icon

Document Information

Using This Documentation

Basic Library Functions

__fbufsize(3C)

__flbf(3C)

__fpending(3C)

__fpurge(3C)

__freadable(3C)

__freading(3C)

__fsetlocking(3C)

__fwritable(3C)

__fwriting(3C)

_edata(3C)

_end(3C)

_etext(3C)

_exithandle(3C)

_flushlbf(3C)

_longjmp(3C)

_setjmp(3C)

_stack_grow(3C)

_tolower(3C)

_toupper(3C)

a64l(3C)

abort(3C)

abs(3C)

addrtosymstr(3C)

addsev(3C)

addseverity(3C)

aio_cancel(3C)

aio_error(3C)

aio_fsync(3C)

aio_read(3C)

aio_return(3C)

aio_suspend(3C)

aio_waitn(3C)

aio_write(3C)

aiocancel(3C)

aioread(3C)

aiowait(3C)

aiowrite(3C)

alloca(3C)

alphasort(3C)

ascftime(3C)

asctime(3C)

asctime_r(3C)

asprintf(3C)

assert(3C)

atexit(3C)

atof(3C)

atoi(3C)

atol(3C)

atoll(3C)

atomic_add(3C)

atomic_add_16(3C)

atomic_add_16_nv(3C)

atomic_add_32(3C)

atomic_add_32_nv(3C)

atomic_add_64(3C)

atomic_add_64_nv(3C)

atomic_add_8(3C)

atomic_add_8_nv(3C)

atomic_add_char(3C)

atomic_add_char_nv(3C)

atomic_add_int(3C)

atomic_add_int_nv(3C)

atomic_add_long(3C)

atomic_add_long_nv(3C)

atomic_add_ptr(3C)

atomic_add_ptr_nv(3C)

atomic_add_short(3C)

atomic_add_short_nv(3C)

atomic_and(3C)

atomic_and_16(3C)

atomic_and_16_nv(3C)

atomic_and_32(3C)

atomic_and_32_nv(3C)

atomic_and_64(3C)

atomic_and_64_nv(3C)

atomic_and_8(3C)

atomic_and_8_nv(3C)

atomic_and_uchar(3C)

atomic_and_uchar_nv(3C)

atomic_and_uint(3C)

atomic_and_uint_nv(3C)

atomic_and_ulong(3C)

atomic_and_ulong_nv(3C)

atomic_and_ushort(3C)

atomic_and_ushort_nv(3C)

atomic_bits(3C)

atomic_cas(3C)

atomic_cas_16(3C)

atomic_cas_32(3C)

atomic_cas_64(3C)

atomic_cas_8(3C)

atomic_cas_ptr(3C)

atomic_cas_uchar(3C)

atomic_cas_uint(3C)

atomic_cas_ulong(3C)

atomic_cas_ushort(3C)

atomic_clear_long_excl(3C)

atomic_dec(3C)

atomic_dec_16(3C)

atomic_dec_16_nv(3C)

atomic_dec_32(3C)

atomic_dec_32_nv(3C)

atomic_dec_64(3C)

atomic_dec_64_nv(3C)

atomic_dec_8(3C)

atomic_dec_8_nv(3C)

atomic_dec_ptr(3C)

atomic_dec_ptr_nv(3C)

atomic_dec_uchar(3C)

atomic_dec_uchar_nv(3C)

atomic_dec_uint(3C)

atomic_dec_uint_nv(3C)

atomic_dec_ulong(3C)

atomic_dec_ulong_nv(3C)

atomic_dec_ushort(3C)

atomic_dec_ushort_nv(3C)

atomic_inc(3C)

atomic_inc_16(3C)

atomic_inc_16_nv(3C)

atomic_inc_32(3C)

atomic_inc_32_nv(3C)

atomic_inc_64(3C)

atomic_inc_64_nv(3C)

atomic_inc_8(3C)

atomic_inc_8_nv(3C)

atomic_inc_ptr(3C)

atomic_inc_ptr_nv(3C)

atomic_inc_uchar(3C)

atomic_inc_uchar_nv(3C)

atomic_inc_uint(3C)

atomic_inc_uint_nv(3C)

atomic_inc_ulong(3C)

atomic_inc_ulong_nv(3C)

atomic_inc_ushort(3C)

atomic_inc_ushort_nv(3C)

atomic_ops(3C)

atomic_or(3C)

atomic_or_16(3C)

atomic_or_16_nv(3C)

atomic_or_32(3C)

atomic_or_32_nv(3C)

atomic_or_64(3C)

atomic_or_64_nv(3C)

atomic_or_8(3C)

atomic_or_8_nv(3C)

atomic_or_uchar(3C)

atomic_or_uchar_nv(3C)

atomic_or_uint(3C)

atomic_or_uint_nv(3C)

atomic_or_ulong(3C)

atomic_or_ulong_nv(3C)

atomic_or_ushort(3C)

atomic_or_ushort_nv(3C)

atomic_set_long_excl(3C)

atomic_swap(3C)

atomic_swap_16(3C)

atomic_swap_32(3C)

atomic_swap_64(3C)

atomic_swap_8(3C)

atomic_swap_ptr(3C)

atomic_swap_uchar(3C)

atomic_swap_uint(3C)

atomic_swap_ulong(3C)

atomic_swap_ushort(3C)

attropen(3C)

backtrace(3C)

backtrace_symbols(3C)

backtrace_symbols_fd(3C)

basename(3C)

bcmp(3C)

bcopy(3C)

bind_textdomain_codeset(3C)

bindtextdomain(3C)

bsd_signal(3C)

bsdmalloc(3MALLOC)

bsearch(3C)

bstring(3C)

btowc(3C)

bzero(3C)

calloc(3C)

calloc(3MALLOC)

canonicalize_file_name(3C)

catclose(3C)

catgets(3C)

catopen(3C)

cfgetispeed(3C)

cfgetospeed(3C)

cfsetispeed(3C)

cfsetospeed(3C)

cftime(3C)

chkauthattr(3C)

chkauthattr_ucred(3C)

clearenv(3C)

clearerr(3C)

clock(3C)

clock_getres(3C)

clock_gettime(3C)

clock_nanosleep(3C)

clock_settime(3C)

closedir(3C)

closefrom(3C)

closelog(3C)

cond_broadcast(3C)

cond_destroy(3C)

cond_init(3C)

cond_reltimedwait(3C)

cond_signal(3C)

cond_timedwait(3C)

cond_wait(3C)

confstr(3C)

crypt(3C)

crypt_genhash_impl(3C)

crypt_gensalt(3C)

crypt_gensalt_impl(3C)

cset(3C)

csetcol(3C)

csetlen(3C)

csetno(3C)

ctermid(3C)

ctermid_r(3C)

ctime(3C)

ctime_r(3C)

ctype(3C)

cuserid(3C)

daemon(3C)

dbm_clearerr(3C)

dbm_close(3C)

dbm_delete(3C)

dbm_error(3C)

dbm_fetch(3C)

dbm_firstkey(3C)

dbm_nextkey(3C)

dbm_open(3C)

dbm_store(3C)

dcgettext(3C)

dcngettext(3C)

decimal_to_double(3C)

decimal_to_extended(3C)

decimal_to_floating(3C)

decimal_to_quadruple(3C)

decimal_to_single(3C)

dgettext(3C)

difftime(3C)

directio(3C)

dirfd(3C)

dirname(3C)

div(3C)

dl_iterate_phdr(3C)

dladdr(3C)

dladdr1(3C)

dlclose(3C)

dldump(3C)

dlerror(3C)

dlinfo(3C)

dlmopen(3C)

dlopen(3C)

dlsym(3C)

dngettext(3C)

door_bind(3C)

door_call(3C)

door_create(3C)

door_cred(3C)

door_getparam(3C)

door_info(3C)

door_return(3C)

door_revoke(3C)

door_server_create(3C)

door_setparam(3C)

door_ucred(3C)

door_unbind(3C)

door_xcreate(3C)

double_to_decimal(3C)

drand48(3C)

dup2(3C)

econvert(3C)

ecvt(3C)

edata(3C)

enable_extended_FILE_stdio(3C)

encrypt(3C)

end(3C)

endauthattr(3C)

endexecattr(3C)

endgrent(3C)

endnetgrent(3C)

endprofattr(3C)

endpwent(3C)

endspent(3C)

enduserattr(3C)

endusershell(3C)

endutent(3C)

endutxent(3C)

erand48(3C)

err(3C)

errno(3C)

errx(3C)

etext(3C)

euccol(3C)

euclen(3C)

eucscol(3C)

exit(3C)

extended_to_decimal(3C)

fattach(3C)

fclose(3C)

fcloseall(3C)

fconvert(3C)

fcvt(3C)

FD_CLR(3C)

FD_ISSET(3C)

FD_SET(3C)

FD_ZERO(3C)

fdatasync(3C)

fdetach(3C)

fdopen(3C)

fdopendir(3C)

fdwalk(3C)

feof(3C)

ferror(3C)

fflush(3C)

ffs(3C)

ffsl(3C)

ffsll(3C)

fgetattr(3C)

fgetc(3C)

fgetgrent(3C)

fgetgrent_r(3C)

fgetpos(3C)

fgetpwent(3C)

fgetpwent_r(3C)

fgets(3C)

fgetspent(3C)

fgetspent_r(3C)

fgetuserattr(3C)

fgetwc(3C)

fgetws(3C)

file_to_decimal(3C)

fileno(3C)

finite(3C)

floating_to_decimal(3C)

flockfile(3C)

fls(3C)

flsl(3C)

flsll(3C)

fmtmsg(3C)

fnmatch(3C)

fopen(3C)

fpclass(3C)

fpgetmask(3C)

fpgetround(3C)

fpgetsticky(3C)

fprintf(3C)

fpsetmask(3C)

fpsetround(3C)

fpsetsticky(3C)

fputc(3C)

fputs(3C)

fputwc(3C)

fputws(3C)

fread(3C)

frealpath(3C)

free(3C)

free(3MALLOC)

free_authattr(3C)

free_execattr(3C)

free_profattr(3C)

free_proflist(3C)

free_userattr(3C)

freopen(3C)

fscanf(3C)

fseek(3C)

fseeko(3C)

fsetattr(3C)

fsetpos(3C)

fsync(3C)

ftell(3C)

ftello(3C)

ftime(3C)

ftok(3C)

ftruncate(3C)

ftrylockfile(3C)

ftw(3C)

func_to_decimal(3C)

funlockfile(3C)

fwide(3C)

fwprintf(3C)

fwrite(3C)

fwscanf(3C)

gconvert(3C)

gcvt(3C)

get_nprocs(3C)

get_nprocs_conf(3C)

getaccess_times (3C)

getattrat(3C)

getauthattr(3C)

getauthnam(3C)

getc(3C)

getc_unlocked(3C)

getchar(3C)

getchar_unlocked(3C)

getcpuid(3C)

getcwd(3C)

getdate(3C)

getdelim(3C)

getdtablesize(3C)

getenv(3C)

getexecattr(3C)

getexecname(3C)

getexecprof(3C)

getexecuser(3C)

getextmntent(3C)

getgrent(3C)

getgrent_r(3C)

getgrgid(3C)

getgrgid_r(3C)

getgrnam(3C)

getgrnam_r(3C)

gethomelgroup(3C)

gethostid(3C)

gethostname(3C)

gethrtime(3C)

gethrvtime(3C)

getline(3C)

getloadavg(3C)

getlogin(3C)

getlogin_r(3C)

getmntany(3C)

getmntent(3C)

getnetgrent(3C)

getnetgrent_r(3C)

getopt(3C)

getopt_clip(3C)

getopt_long(3C)

getopt_long_only(3C)

getpagesize(3C)

getpagesizes(3C)

getpass(3C)

getpassphrase(3C)

getpeerucred(3C)

getpriority(3C)

getprofattr(3C)

getproflist(3C)

getprofnam(3C)

getprogname(3C)

getpw(3C)

getpwent(3C)

getpwent_r(3C)

getpwnam(3C)

getpwnam_r(3C)

getpwuid(3C)

getpwuid_r(3C)

getrusage(3C)

gets(3C)

getspent(3C)

getspent_r(3C)

getspnam(3C)

getspnam_r(3C)

getsubopt(3C)

gettext(3C)

gettimeofday(3C)

gettxt(3C)

getuserattr(3C)

getuserattrnam(3C)

getusernam(3C)

getusershell(3C)

getuseruid(3C)

getutent(3C)

getutid(3C)

getutline(3C)

getutmp(3C)

getutmpx(3C)

getutxent(3C)

getutxid(3C)

getutxline(3C)

getvfsany(3C)

getvfsent(3C)

getvfsfile(3C)

getvfsspec(3C)

getw(3C)

getwc(3C)

getwchar(3C)

getwd(3C)

getwidth(3C)

getws(3C)

getzoneid(3C)

getzoneidbyname(3C)

getzonenamebyid(3C)

glob(3C)

globfree(3C)

gmtime(3C)

gmtime_r(3C)

grantpt(3C)

gsignal(3C)

hasmntopt(3C)

hcreate(3C)

hdestroy(3C)

hsearch(3C)

iconv(3C)

iconv_close(3C)

iconv_open(3C)

iconvctl(C)

iconvstr(3C)

imaxabs(3C)

imaxdiv(3C)

index(3C)

initgroups(3C)

initstate(3C)

innetgr(3C)

insque(3C)

is_system_labeled(3C)

isaexec(3C)

isalnum(3C)

isalpha(3C)

isascii(3C)

isastream(3C)

isatty(3C)

isblank(3C)

iscntrl(3C)

isdigit(3C)

isenglish(3C)

isgraph(3C)

isideogram(3C)

islower(3C)

isnand(3C)

isnanf(3C)

isnumber(3C)

isphonogram(3C)

isprint(3C)

ispunct(3C)

isspace(3C)

isspecial(3C)

isupper(3C)

iswalnum(3C)

iswalpha(3C)

iswascii(3C)

iswblank(3C)

iswcntrl(3C)

iswctype(3C)

iswdigit(3C)

iswgraph(3C)

iswlower(3C)

iswprint(3C)

iswpunct(3C)

iswspace(3C)

iswupper(3C)

iswxdigit(3C)

isxdigit(3C)

jrand48(3C)

killpg(3C)

kva_match(3C)

l64a(3C)

labs(3C)

lckpwdf(3C)

lcong48(3C)

ldiv(3C)

lfind(3C)

lfmt(3C)

lio_listio(3C)

llabs(3C)

lldiv(3C)

lltostr(3C)

localeconv(3C)

localelist(3C)

localelistfree(3C)

localtime(3C)

localtime_r(3C)

lockf(3C)

longjmp(3C)

lrand48(3C)

lsearch(3C)

madvise(3C)

major(3C)

makecontext(3C)

makedev(3C)

mallinfo(3MALLOC)

malloc(3C)

malloc(3MALLOC)

mallocctl(3MALLOC)

mallopt(3MALLOC)

mapmalloc(3MALLOC)

match_execattr(3C)

mblen(3C)

mbrlen(3C)

mbrtowc(3C)

mbsinit(3C)

mbsrtowcs(3C)

mbstowcs(3C)

mbtowc(3C)

memalign(3C)

memalign(3MALLOC)

membar_consumer(3C)

membar_enter(3C)

membar_exit(3C)

membar_ops(3C)

membar_producer(3C)

memccpy(3C)

memchr(3C)

memcmp(3C)

memcpy(3C)

memmem(3C)

memmove(3C)

memory(3C)

memset(3C)

minor(3C)

mkdtemp(3C)

mkfifo(3C)

mkfifoat(3C)

mkstemp(3C)

mkstemps(3C)

mktemp(3C)

mktime(3C)

mlock(3C)

mlockall(3C)

monitor(3C)

mq_close(3C)

mq_getattr(3C)

mq_notify(3C)

mq_open(3C)

mq_receive(3C)

mq_reltimedreceive_np(3C)

mq_reltimedsend_np(3C)

mq_send(3C)

mq_setattr(3C)

mq_timedreceive(3C)

mq_timedsend(3C)

mq_unlink(3C)

mrand48(3C)

msync(3C)

mtmalloc(3MALLOC)

munlock(3C)

munlockall(3C)

mutex_consistent(3C)

mutex_destroy(3C)

mutex_init(3C)

mutex_lock(3C)

mutex_trylock(3C)

mutex_unlock(3C)

nanosleep(3C)

ndbm(3C)

nftw(3C)

ngettext(3C)

nl_langinfo(3C)

nrand48(3C)

offsetof(3C)

opendir(3C)

openlog(3C)

pclose(3C)

perror(3C)

pfmt(3C)

plock(3C)

popen(3C)

port_alert(3C)

port_associate(3C)

port_create(3C)

port_dissociate(3C)

port_get(3C)

port_getn(3C)

port_send(3C)

port_sendn(3C)

posix_fadvise(3C)

posix_fallocate(3C)

posix_madvise(3C)

posix_memalign(3C)

posix_openpt(3C)

posix_spawn(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)

posix_spawnattr_destroy(3C)

posix_spawnattr_getflags(3C)

posix_spawnattr_getpgroup(3C)

posix_spawnattr_getschedparam(3C)

posix_spawnattr_getschedpolicy(3C)

posix_spawnattr_getsigdefault(3C)

posix_spawnattr_getsigignore_np(3C)

posix_spawnattr_getsigmask(3C)

posix_spawnattr_init(3C)

posix_spawnattr_setflags(3C)

posix_spawnattr_setpgroup(3C)

posix_spawnattr_setschedparam(3C)

posix_spawnattr_setschedpolicy(3C)

posix_spawnattr_setsigdefault(3C)

posix_spawnattr_setsigignore_np(3C)

posix_spawnattr_setsigmask(3C)

posix_spawnp(3C)

printf(3C)

printstack(3C)

priv_addset(3C)

priv_allocset(3C)

priv_basicset(3C)

priv_copyset(3C)

priv_delset(3C)

priv_emptyset(3C)

priv_fillset(3C)

priv_freeset(3C)

priv_getbyname(3C)

priv_getbynum(3C)

priv_getsetbyname(3C)

priv_getsetbynum(3C)

priv_gettext(3C)

priv_ineffect(3C)

priv_intersect(3C)

priv_inverse(3C)

priv_isemptyset(3C)

priv_isequalset(3C)

priv_isfullset(3C)

priv_ismember(3C)

priv_issubset(3C)

priv_set(3C)

priv_set_to_str(3C)

priv_str_to_set(3C)

priv_union(3C)

pselect(3C)

pset_getloadavg(3C)

psiginfo(3C)

psignal(3C)

pthread_atfork(3C)

pthread_attr_destroy(3C)

pthread_attr_getdetachstate(3C)

pthread_attr_getguardsize(3C)

pthread_attr_getinheritsched(3C)

pthread_attr_getschedparam(3C)

pthread_attr_getschedpolicy(3C)

pthread_attr_getscope(3C)

pthread_attr_getstack(3C)

pthread_attr_getstackaddr(3C)

pthread_attr_getstacksize(3C)

pthread_attr_init(3C)

pthread_attr_setdetachstate(3C)

pthread_attr_setguardsize(3C)

pthread_attr_setinheritsched(3C)

pthread_attr_setschedparam(3C)

pthread_attr_setschedpolicy(3C)

pthread_attr_setscope(3C)

pthread_attr_setstack(3C)

pthread_attr_setstackaddr(3C)

pthread_attr_setstacksize(3C)

pthread_barrier_destroy(3C)

pthread_barrier_init(3C)

pthread_barrier_wait(3C)

pthread_barrierattr_destroy(3C)

pthread_barrierattr_getpshared(3C)

pthread_barrierattr_init(3C)

pthread_barrierattr_setpshared(3C)

pthread_cancel(3C)

pthread_cleanup_pop(3C)

pthread_cleanup_push(3C)

pthread_cond_broadcast(3C)

pthread_cond_destroy(3C)

pthread_cond_init(3C)

pthread_cond_reltimedwait_np(3C)

pthread_cond_signal(3C)

pthread_cond_timedwait(3C)

pthread_cond_wait(3C)

pthread_condattr_destroy(3C)

pthread_condattr_getclock(3C)

pthread_condattr_getpshared(3C)

pthread_condattr_init(3C)

pthread_condattr_setclock(3C)

pthread_condattr_setpshared(3C)

pthread_create(3C)

pthread_detach(3C)

pthread_equal(3C)

pthread_exit(3C)

pthread_getconcurrency(3C)

pthread_getschedparam(3C)

pthread_getspecific(3C)

pthread_join(3C)

pthread_key_create(3C)

pthread_key_create_once_np(3C)

pthread_key_delete(3C)

pthread_kill(3C)

pthread_mutex_consistent(3C)

pthread_mutex_destroy(3C)

pthread_mutex_getprioceiling(3C)

pthread_mutex_init(3C)

pthread_mutex_lock(3C)

pthread_mutex_reltimedlock_np(3C)

pthread_mutex_setprioceiling(3C)

pthread_mutex_timedlock(3C)

pthread_mutex_trylock(3C)

pthread_mutex_unlock(3C)

pthread_mutexattr_destroy(3C)

pthread_mutexattr_getprioceiling(3C)

pthread_mutexattr_getprotocol(3C)

pthread_mutexattr_getpshared(3C)

pthread_mutexattr_getrobust(3C)

pthread_mutexattr_gettype(3C)

pthread_mutexattr_init(3C)

pthread_mutexattr_setprioceiling(3C)

pthread_mutexattr_setprotocol(3C)

pthread_mutexattr_setpshared(3C)

pthread_mutexattr_setrobust(3C)

pthread_mutexattr_settype(3C)

pthread_once(3C)

pthread_rwlock_destroy(3C)

pthread_rwlock_init(3C)

pthread_rwlock_rdlock(3C)

pthread_rwlock_reltimedrdlock_np(3C)

pthread_rwlock_reltimedwrlock_np(3C)

pthread_rwlock_timedrdlock(3C)

pthread_rwlock_timedwrlock(3C)

pthread_rwlock_tryrdlock(3C)

pthread_rwlock_trywrlock(3C)

pthread_rwlock_unlock(3C)

pthread_rwlock_wrlock(3C)

pthread_rwlockattr_destroy(3C)

pthread_rwlockattr_getpshared(3C)

pthread_rwlockattr_init(3C)

pthread_rwlockattr_setpshared(3C)

pthread_self(3C)

pthread_setcancelstate(3C)

pthread_setcanceltype(3C)

pthread_setconcurrency(3C)

pthread_setschedparam(3C)

pthread_setschedprio(3C)

pthread_setspecific(3C)

pthread_sigmask(3C)

pthread_spin_destroy(3C)

pthread_spin_init(3C)

pthread_spin_lock(3C)

pthread_spin_trylock(3C)

pthread_spin_unlock(3C)

pthread_testcancel(3C)

ptrace(3C)

ptsname(3C)

putc(3C)

putc_unlocked(3C)

putchar(3C)

putchar_unlocked(3C)

putenv(3C)

putmntent(3C)

putpwent(3C)

puts(3C)

putspent(3C)

pututline(3C)

pututxline(3C)

putw(3C)

putwc(3C)

putwchar(3C)

putws(3C)

qeconvert(3C)

qfconvert(3C)

qgconvert(3C)

qsort(3C)

quadruple_to_decimal(3C)

raise(3C)

rand(3C)

rand_r(3C)

random(3C)

rbac_chkauth(3C)

rctl_walk(3C)

rctlblk_get_enforced_value(3C)

rctlblk_get_firing_time(3C)

rctlblk_get_global_action(3C)

rctlblk_get_global_flags(3C)

rctlblk_get_local_action(3C)

rctlblk_get_local_flags(3C)

rctlblk_get_privilege(3C)

rctlblk_get_recipient_pid(3C)

rctlblk_get_value(3C)

rctlblk_set_local_action(3C)

rctlblk_set_local_flags(3C)

rctlblk_set_privilege(3C)

rctlblk_set_recipient_pid(3C)

rctlblk_set_value(3C)

rctlblk_size(3C)

re_comp(3C)

re_exec(3C)

readdir(3C)

readdir_r(3C)

realloc(3C)

realloc(3MALLOC)

realpath(3C)

reboot(3C)

regcmp(3C)

regcomp(3C)

regerror(3C)

regex(3C)

regexec(3C)

regfree(3C)

remove(3C)

remque(3C)

resetmnttab(3C)

rewind(3C)

rewinddir(3C)

rindex(3C)

rw_rdlock(3C)

rw_tryrdlock(3C)

rw_trywrlock(3C)

rw_unlock(3C)

rw_wrlock(3C)

rwlock(3C)

rwlock_destroy(3C)

rwlock_init(3C)

scandir(3C)

scanf(3C)

sched_get_priority_max(3C)

sched_get_priority_min(3C)

sched_getparam(3C)

sched_getscheduler(3C)

sched_rr_get_interval(3C)

sched_setparam(3C)

sched_setscheduler(3C)

sched_yield(3C)

schedctl_exit(3C)

schedctl_init(3C)

schedctl_lookup(3C)

schedctl_start(3C)

schedctl_stop(3C)

seconvert(3C)

seed48(3C)

seekdir(3C)

select(3C)

sem_close(3C)

sem_destroy(3C)

sem_getvalue(3C)

sem_init(3C)

sem_open(3C)

sem_post(3C)

sem_reltimedwait_np(3C)

sem_timedwait(3C)

sem_trywait(3C)

sem_unlink(3C)

sem_wait(3C)

sema_destroy(3C)

sema_init(3C)

sema_post(3C)

sema_trywait(3C)

sema_wait(3C)

semaphore(3C)

setattrat(3C)

setauthattr(3C)

setbuf(3C)

setbuffer(3C)

setcat(3C)

setenv(3C)

setexecattr(3C)

setgrent(3C)

sethostname(3C)

setjmp(3C)

setkey(3C)

setlabel(3C)

setlinebuf(3C)

setlocale(3C)

setlogmask(3C)

setnetgrent(3C)

setpriority(3C)

setprofattr(3C)

setprogname(3C)

setpwent(3C)

setspent(3C)

setstate(3C)

settimeofday(3C)

setuserattr(3C)

setusershell(3C)

setutent(3C)

setutxent(3C)

setvbuf(3C)

sfconvert(3C)

sgconvert(3C)

shm_open(3C)

shm_unlink(3C)

sig2str(3C)

sigaddset(3C)

sigdelset(3C)

sigemptyset(3C)

sigfillset(3C)

sigfpe(3C)

sighold(3C)

sigignore(3C)

siginterrupt(3C)

sigismember(3C)

siglongjmp(3C)

signal(3C)

sigpause(3C)

sigqueue(3C)

sigrelse(3C)

sigset(3C)

sigsetjmp(3C)

sigsetops(3C)

sigstack(3C)

sigtimedwait(3C)

sigwaitinfo(3C)

single_to_decimal(3C)

sleep(3C)

smt_pause(3C)

snprintf(3C)

sprintf(3C)

srand(3C)

srand48(3C)

srandom(3C)

sscanf(3C)

ssignal(3C)

stack_getbounds(3C)

stack_inbounds(3C)

stack_setbounds(3C)

stack_violation(3C)

stdio(3C)

stpcpy(3C)

stpncpy(3C)

str2sig(3C)

strcasecmp(3C)

strcasestr(3C)

strcat(3C)

strchr(3C)

strchrnul(3C)

strcmp(3C)

strcoll(3C)

strcpy(3C)

strcspn(3C)

strdup(3C)

strdupa(3C)

strerror(3C)

strerror_r(3C)

strfmon(3C)

strftime(3C)

string(3C)

string_to_decimal(3C)

strlcat(3C)

strlcpy(3C)

strlen(3C)

strncasecmp(3C)

strncat(3C)

strncmp(3C)

strncpy(3C)

strndup(3C)

strndupa(3C)

strnlen(3C)

strnstr(3C)

strpbrk(3C)

strptime(3C)

strrchr(3C)

strsep(3C)

strsignal(3C)

strspn(3C)

strstr(3C)

strtod(3C)

strtof(3C)

strtoimax(3C)

strtok(3C)

strtok_r(3C)

strtol(3C)

strtold(3C)

strtoll(3C)

strtoul(3C)

strtoull(3C)

strtoumax(3C)

strtows(3C)

strxfrm(3C)

swab(3C)

swapcontext(3C)

swprintf(3C)

swscanf(3C)

sync_instruction_memory(3C)

sysconf(3C)

syslog(3C)

system(3C)

tcdrain(3C)

tcflow(3C)

tcflush(3C)

tcgetattr(3C)

tcgetpgrp(3C)

tcgetsid(3C)

tcsendbreak(3C)

tcsetattr(3C)

tcsetpgrp(3C)

td_event_addset(3C_DB)

td_event_delset(3C_DB)

td_event_emptyset(3C_DB)

td_event_fillset(3C_DB)

td_eventisempty(3C_DB)

td_eventismember(3C_DB)

td_init(3C_DB)

td_log(3C_DB)

td_sync_get_info(3C_DB)

td_sync_get_stats(3C_DB)

td_sync_setstate(3C_DB)

td_sync_waiters(3C_DB)

td_ta_clear_event(3C_DB)

td_ta_delete(3C_DB)

td_ta_enable_stats(3C_DB)

td_ta_event_addr(3C_DB)

td_ta_event_getmsg(3C_DB)

td_ta_get_nthreads(3C_DB)

td_ta_get_ph(3C_DB)

td_ta_get_stats(3C_DB)

td_ta_map_addr2sync(3C_DB)

td_ta_map_id2thr(3C_DB)

td_ta_map_lwp2thr(3C_DB)

td_ta_new(3C_DB)

td_ta_reset_stats(3C_DB)

td_ta_set_event(3C_DB)

td_ta_setconcurrency(3C_DB)

td_ta_sync_iter(3C_DB)

td_ta_sync_tracking_enable(3C_DB)

td_ta_thr_iter(3C_DB)

td_ta_tsd_iter(3C_DB)

td_thr_clear_event(3C_DB)

td_thr_dbresume(3C_DB)

td_thr_dbsuspend(3C_DB)

td_thr_event_enable(3C_DB)

td_thr_event_getmsg(3C_DB)

td_thr_get_info(3C_DB)

td_thr_getcxregs(3C_DB)

td_thr_getcxregsize(3C_DB)

td_thr_getfpregs(3C_DB)

td_thr_getgregs(3C_DB)

td_thr_getxregs(3C_DB)

td_thr_getxregsize(3C_DB)

td_thr_lockowner(3C_DB)

td_thr_set_event(3C_DB)

td_thr_setcxregs(3C_DB)

td_thr_setfpregs(3C_DB)

td_thr_setgregs(3C_DB)

td_thr_setprio(3C_DB)

td_thr_setsigpending(3C_DB)

td_thr_setxregs(3C_DB)

td_thr_sigsetmask(3C_DB)

td_thr_sleepinfo(3C_DB)

td_thr_tlsbase(3C_DB)

td_thr_tsd(3C_DB)

td_thr_validate(3C_DB)

tdelete(3C)

tdestroy(3C)

tell(3C)

telldir(3C)

tempnam(3C)

termios(3C)

textdomain(3C)

tfind(3C)

thr_continue(3C)

thr_create(3C)

thr_exit(3C)

thr_getconcurrency(3C)

thr_getprio(3C)

thr_getspecific(3C)

thr_join(3C)

thr_keycreate(3C)

thr_keycreate_once(3C)

thr_kill(3C)

thr_main(3C)

thr_min_stack(3C)

thr_self(3C)

thr_setconcurrency(3C)

thr_setprio(3C)

thr_setspecific(3C)

thr_sigsetmask(3C)

thr_stksegment(3C)

thr_suspend(3C)

thr_yield(3C)

timer_create(3C)

timer_delete(3C)

timer_getoverrun(3C)

timer_gettime(3C)

timer_settime(3C)

timeradd(3C)

timerclear(3C)

timercmp(3C)

timerisset(3C)

timersub(3C)

tmpfile(3C)

tmpnam(3C)

tmpnam_r(3C)

toascii(3C)

tolower(3C)

toupper(3C)

towctrans(3C)

towlower(3C)

towupper(3C)

truncate(3C)

tsearch(3C)

ttyname(3C)

ttyname_r(3C)

ttyslot(3C)

twalk(3C)

tzset(3C)

u8_strcmp(3C)

u8_textprep_str(3C)

u8_validate(3C)

ualarm(3C)

uconv_u16tou32(3C)

uconv_u16tou8(3C)

uconv_u32tou16(3C)

uconv_u32tou8(3C)

uconv_u8tou16(3C)

uconv_u8tou32(3C)

ucred_free(3C)

ucred_get(3C)

ucred_getegid(3C)

ucred_geteuid(3C)

ucred_getgroups(3C)

ucred_getlabel(3C)

ucred_getpflags(3C)

ucred_getpid(3C)

ucred_getprivset(3C)

ucred_getprojid(3C)

ucred_getrgid(3C)

ucred_getruid(3C)

ucred_getsgid(3C)

ucred_getsuid(3C)

ucred_getzoneid(3C)

ucred_size(3C)

ulckpwdf(3C)

ulltostr(3C)

umem_alloc(3MALLOC)

umem_cache_alloc(3MALLOC)

umem_cache_create(3MALLOC)

umem_cache_destroy(3MALLOC)

umem_cache_free(3MALLOC)

umem_debug(3MALLOC)

umem_free(3MALLOC)

umem_nofail_callback(3MALLOC)

umem_zalloc(3MALLOC)

ungetc(3C)

ungetwc(3C)

unlockpt(3C)

unordered(3C)

unsetenv(3C)

updwtmp(3C)

updwtmpx(3C)

usleep(3C)

utmpname(3C)

utmpxname(3C)

valloc(3C)

valloc(3MALLOC)

vasprintf(3C)

verr(3C)

verrx(3C)

vfprintf(3C)

vfscanf(3C)

vfwprintf(3C)

vfwscanf(3C)

vlfmt(3C)

vpfmt(3C)

vprintf(3C)

vscanf(3C)

vsnprintf(3C)

vsprintf(3C)

vsscanf(3C)

vswprintf(3C)

vswscanf(3C)

vsyslog(3C)

vwarn(3C)

vwarnx(3C)

vwprintf(3C)

vwscanf(3C)

wait(3C)

wait3(3C)

wait4(3C)

waitpid(3C)

walkcontext(3C)

warn(3C)

warnx(3C)

watchmalloc(3MALLOC)

watof(3C)

watoi(3C)

watol(3C)

watoll(3C)

wcpcpy(3C)

wcpncpy(3C)

wcrtomb(3C)

wcscasecmp(3C)

wcscat(3C)

wcschr(3C)

wcscmp(3C)

wcscoll(3C)

wcscpy(3C)

wcscspn(3C)

wcsdup(3C)

wcsetno(3C)

wcsftime(3C)

wcslen(3C)

wcsncasecmp(3C)

wcsncat(3C)

wcsncmp(3C)

wcsncpy(3C)

wcsnlen(3C)

wcspbrk(3C)

wcsrchr(3C)

wcsrtombs(3C)

wcsspn(3C)

wcsstr(3C)

wcstod(3C)

wcstof(3C)

wcstoimax(3C)

wcstok(3C)

wcstol(3C)

wcstold(3C)

wcstoll(3C)

wcstombs(3C)

wcstoul(3C)

wcstoull(3C)

wcstoumax(3C)

wcstring(3C)

wcswcs(3C)

wcswidth(3C)

wcsxfrm(3C)

wctob(3C)

wctomb(3C)

wctrans(3C)

wctrans_ja(3C)

wctype(3C)

wctype_ja(3C)

wcwidth(3C)

windex(3C)

wmemchr(3C)

wmemcmp(3C)

wmemcpy(3C)

wmemmove(3C)

wmemset(3C)

wordexp(3C)

wordfree(3C)

wprintf(3C)

wrindex(3C)

wscanf(3C)

wscasecmp(3C)

wscat(3C)

wschr(3C)

wscmp(3C)

wscol(3C)

wscoll(3C)

wscpy(3C)

wscspn(3C)

wsdup(3C)

wslen(3C)

wsncasecmp(3C)

wsncat(3C)

wsncmp(3C)

wsncpy(3C)

wspbrk(3C)

wsprintf(3C)

wsrchr(3C)

wsscanf(3C)

wsspn(3C)

wstod(3C)

wstok(3C)

wstol(3C)

wstostr(3C)

wstring(3C)

wsxfrm(3C)

door_xcreate(3C)

Name

door_xcreate - create a door descriptor for a private door with per-door control over thread creation

Synopsis

#include <door.h>

typedef void door_server_procedure_t(void *, char *, size_t,
     door_desc_t *, uint_t);
typedef int door_xcreate_server_func_t(door_info_t *,
     void *(*)(void *), void *, void *);
typedef void door_xcreate_thrsetup_func_t(void *);
int door_xcreate(door_server_procedure_t *server_procedure,
     void *cookie, uint_t attributes,
     door_xcreate_server_func_t *thr_create_func,
     door_xcreate_thrsetup_func_t *thr_setup_func, void *crcookie,
     int nthread);

Description

The door_xcreate() function creates a private door to the given server_procedure, with per-door control over the creation of threads that will service invocations of that door. A private door is a door that has a private pool of threads that service calls to that door alone; non-private doors share a pool of service threads (see door_create(3C)).

Creating private doors using door_create()

Prior to the introduction of door_xcreate(), a private door was created using door_create() specifying attributes including DOOR_PRIVATE after installing a suitable door server thread creation function using door_server_create(). During such a call to door_create(), the first server thread for that door is created by calling the door server function; you must therefore already have installed a custom door server creation function using door_server_create(). The custom server creation function is called at initial creation of a private door, and again whenever a new invocation uses the last available thread for that door. The function must decide whether it wants to increase the level of concurrency by creating an additional thread - if it decides not to then further invocations may have to wait for an existing active invocation to complete before they can proceed. Additional threads may be created using whatever thread attributes are desired in the application, and the application must specify a thread start function (to thr_create(3C) or pthread_create(3C)) which will perform a door_bind() to the newly-created door before calling door_return(NULL, 0, NULL, 0) to enter service. See door_server_create(3C) and door_bind(3C) for more information and for an example.

Creating private doors with door_xcreate()

The descriptor returned from door_xcreate() will be marked as close on exec (FD_CLOEXEC). Information about a door is available for all clients of a door using door_info(3C). Applications concerned with security should not place secure information in door data that is accessible by door_info(). In particular, secure data should not be stored in the data item cookie.

A process can advertise a door in the file system name space using fattach(3C).

After creation, door_setparam(3C)can be used to set limits on the amount of data and descriptors clients can send over the door.

A door created with door_xcreate() may be revoked using door_revoke(3C). This closes the associated file descriptor, and acts as a barrier to further door invocations, but existing active invocations are not guaranteed to have completed before door_revoke() returns. Server threads bound to a revoked door do not wakeup or exit automatically when the door is revoked.

Return Values

Upon successful completion, door_xcreate() returns a non-negative value. Otherwise, door_xcreate() returns -1 and sets errno to indicate the error.

Errors

The door_xcreate() function will fail if:

E2BIG

The requested nthread is too large. A small amount of stack space is required for each thread we must start and synchronize with. If extending the door_xcreate() stack by the required amount will exceed the stack bounds then E2BIG is returned.

EBADF

The attempt to door_bind() within the library-provided thread start function failed.

EINVAL

Invalid attributes are passed, nthread is less than 1, or thr_create_func() is NULL. This is also returned if thr_create_func() returns 0 (no thread creation attempted) during door_xcreate ().

EMFILE

The process has too many open descriptors.

ENOMEM

Insufficient memory condition while creating the door.

ENOTSUP

A door_xcreate() call was attempted from a fork handler.

EPIPE

A call to the nominated thr_create_func() returned -1 indicating that pthread_create() or thr_create() failed.

Examples

Example 1 Create a private door with an initial pool of 10 server threads

Create a private door with an initial pool of 10 server threads. Threads are created with the minimum required attributes and there is no thread setup function. Use fattach() to advertise the door in the filesystem namespace.

static pthread_attr_t tattr;

/*
 * Simplest possible door_xcreate_server_func_t.  Always attempt to 
 * create a thread, using the previously initialized attributes for 
 * all threads. We must use the start function and argument provided,
 * and make no use of our private mycookie argument.
 */
int
thrcreatefunc(door_info_t *dip, void *(*startf)(void *), 
    void *startfarg, void *mycookie)
{
        if (pthread_create(NULL, &tattr, startf, startfarg) != 0) {
                perror("thrcreatefunc: pthread_create");
                return (-1);
        }

        return (1);
}

/*
 * Dummy door server procedure - does no processing.
 */
void
door_proc(void *cookie, char *argp, size_t argsz, door_desc_t *descp,
    uint_t n)
{
    door_return (NULL, 0, NULL, 0);
}

int
main(int argc, char *argv[])
{
    struct stat buf;
    int did;

    /*
     * Setup thread attributes - minimum required.
     */
    (void) pthread_attr_init(&tattr);
    (void) pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
    (void) pthread_attr_setscope(&tattr, PTHREAD_SCOPE_SYSTEM);

    /*
     * Create a private door with an initial pool of 10 server threads.
     */
    did = door_xcreate(door_proc, NULL, 0, thrcreatefunc, NULL, NULL, 
                       10);

    if (did == -1) {
        perror("door_xcreate");
        exit(1);
    }

    if (stat(DOORPATH, &buf) < 0) {
        int newfd;

        if ((newfd = creat(DOORPATH, 0644)) < 0) {
            perror("creat");
            exit(1);
        }
        (void) close(newfd);
    }

    (void) fdetach(DOORPATH);

    (void) fdetach(DOORPATH);
    if (fattach(did, DOORPATH) < 0) {
        perror("fattach");
        exit(1);
    }

    (void) fprintf(stderr, "Pausing in main\n");
    (void) pause();
}

Example 2 Create a private door with exactly one server thread and no callbacks for additional threads

Create a private door with exactly one server thread and no callbacks for additional threads. Use a server thread stacksize of 32K, and specify a thread setup function.

#define DOORPATH        "/tmp/grmdoor"

static pthread_attr_t tattr;

/*
 * Thread setup function - configuration that must be performed from
 * the conext of the new thread.  The mycookie argument is the
 * second-to-last argument from door_xcreate.
 */
void
thrsetupfunc(void *mycookie)
{
    /*
     * If a thread setup function is specified it must do the
     * following at minimum.
     */
    (void) pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);

    /*
     * The default thread setup functions also performs the following
     * to disable thread cancellation notifications, so that server
     * threads are not cancelled when a client aborts a door call.
     * This is not a requirement.
     */
    (void) pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);

    /*
     * Now we can go on to perform other thread initialization,
     * for example to allocate and initialize some thread-specific data
     * for this thread;  for thread-specific data you can use a
       destructor function in pthread_key_create if you want to perform
       any actions if/when a door server thread exits.
     */
}

/*
 * The door_xcreate_server_func_t we will use for server thread 
 * creation. The mycookie argument is the second-to-last argument
 * from door_xcreate.
 */
int
thrcreatefunc(door_info_t *dip, void *(*startf)(void *), 
    void *startfarg, void *mycookie)
{
    if (pthread_create(NULL, &tattr, startf, startfarg) != 0) {
            perror("thrcreatefunc: pthread_create");
            return (-1);
    }

    return (1);
}

/*
 * Door procedure.  The cookie received here is the second arg to
 * door_xcreate.
 */
void
door_proc(void *cookie, char *argp, size_t argsz, door_desc_t *descp,
    uint_t n)
{
    (void) door_return(NULL, 0, NULL, 0);
}

int
main(int argc, char *argv[])
{
    struct stat buf;
    int did;

    /*
     * Configure thread attributes we will use in thrcreatefunc.
     * The PTHREAD_CREATE_DETACHED and PTHREAD_SCOPE_SYSTEM are
     * required.
     */
    (void) pthread_attr_init(&tattr);
    (void) pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
    (void) pthread_attr_setscope(&tattr, PTHREAD_SCOPE_SYSTEM);
    (void) pthread_attr_setstacksize(&tattr, 16 * 1024);

    /*
     * Create a private door with just one server thread and asking for
         * no further callbacks on thread pool depletion during an
         * invocation.
         */
    did = door_xcreate(door_proc, NULL, DOOR_NO_DEPLETION_CB,
        thrcreatefunc, thrsetupfunc, NULL, 1);

    if (did == -1) {
            perror("door_xcreate");
            exit(1);
    }

    if (stat(DOORPATH, &buf) < 0) {
            int newfd;

            if ((newfd = creat(DOORPATH, 0644)) < 0) {
                    perror("creat");
                    exit(1);
            }
            (void) close(newfd);
    }

    (void) fdetach(DOORPATH);
    if (fattach(did, DOORPATH) < 0) {
            perror("fattach");
            exit(1);
    }

    (void) fprintf(stderr, "Pausing in main\n");
    (void) pause();
}

Attributes

See attributes(5) for descriptions of the following attributes:

ATTRIBUTE TYPE
ATTRIBUTE VALUE
Architecture
all
Availability
system/core-os
Interface Stability
Committed
MT-Level
Safe

See Also

door_bind(3C), door_call(3C), door_create(3C), door_info(3C), door_revoke(3C), door_server_create(3C), door_setparam(3C), fattach(3C), libdoor(3LIB), pthread_create(3C), pthread_cleanup_pop(3C), pthread_cleanup_push(3C), thr_create(3C), attributes(5), cancellation(5)