Contents|Index|Previous|Next
Reentrancy
Reentrancy
is a characteristic of library functions allowing multiple processes to
use the same address space with assurance that the values stored in those
spaces will remain constant between calls.
Cygnus implements the library
functions to ensure that, whenever possible, these library functions are
reentrant. However, there are some functions that can not be trivially
made reentrant. Hooks have been provided to allow you to use these functions
in a fully reentrant fashion. These hooks use the structure, _reent,
defined in reent.h.
All functions which must
manipulate global information are available in two versions.
-
The first version has the usual
name, using a single global instance of the reentrancy structure.
-
The second has a different name,
normally formed by prepending ‘_’
and appending ‘_r’
and taking a pointer to the particular reentrancy structure to use.
For example, the function, fopen,
takes two arguments, file
and mode,
and uses the global reentrancy structure. The function, _fopen_r,
takes the argument, struct_reent,
which is a pointer to an instance of the reentrancy structure, file
and mode.
Each function which uses
the global reentrancy structure uses the global variable, _impure_ptr,
which points to a reentrancy structure.
This means that you have
two ways to achieve reentrancy. Both require that each thread of execution
control initialize a unique global variable of type, struct_reent.
-
Use the reentrant versions of
the library functions, after initializing a global reentrancy structure
for each process. Use the pointer to this structure as the extra argument
for all library functions.
-
Ensure that each thread of execution
control has a pointer to its own unique reentrancy structure in the global
variable, _impure_ptr,
and call the standard library subroutines.
The following functions are
provided in both reentrant and non-reentrant versions.
Equivalent for errno
variable:
locale
functions:
_localeconv_r |
_setlocale_r |
Equivalents
for stdio
variables:
_stdin_r |
_stdout_r |
_stderr_r |
stdio
functions:
_fdopen_r |
_mkstemp_r |
_remove_r |
_fopen_r |
_mktemp_r |
_rename_r |
_getchar_r |
_perror_r |
_tempnam_r |
_gets_r |
_putchar_r |
_tmpnam_r |
_iprintf_r |
_puts_r |
_tmpfile_r |
signal
functions:
stdlib
functions:
_dtoa_r |
_realloc_r |
_strtoul_r |
_free_r |
_srand_r |
_system_r |
_malloc_r |
_strtod_r |
|
_rand_r |
_strtol_r |
|
String function:
System functions:
_close_r |
_lseek_r |
_stat_r |
_fork_r |
_open_r |
_unlink_r |
_fstat_r |
_read_r |
_wait_r |
_link_r |
_sbrk_r |
_write_r |
Time function:
Top|Contents|Index|Previous|Next