SETLOCALE(3C)           Standard C Library Functions           SETLOCALE(3C)
NAME
       setlocale - modify and query a program's locale
SYNOPSIS
       #include <locale.h>       
char *setlocale(
int category, 
const char *locale);
DESCRIPTION
       The 
setlocale() function selects the appropriate piece of the
       program's locale as specified by the 
category and 
locale arguments.
       The 
category argument may have the following values: 
LC_CTYPE,       
LC_NUMERIC, 
LC_TIME, 
LC_COLLATE, 
LC_MONETARY, 
LC_MESSAGES, and       
LC_ALL. These names are defined in the <
locale.h> header.  The 
LC_ALL       variable names all of a program's locale categories.
       The 
LC_CTYPE variable affects the behavior of character handling
       functions such as 
isdigit(3C) and 
tolower(3C), and multibyte
       character functions such as  
mbtowc(3C) and 
wctomb(3C).
       The 
LC_NUMERIC variable affects the decimal point character and
       thousands separator character for the formatted input/output
       functions and string conversion functions.
       The 
LC_TIME variable affects the date and time format as delivered by       
ascftime(3C), 
cftime(3C), 
getdate(3C), 
strftime(3C), and       
strptime(3C).
       The 
LC_COLLATE variable affects the sort order produced by collating
       functions such as 
strcoll(3C) and 
strxfrm(3C).
       The 
LC_MONETARY variable affects the monetary formatted information
       returned by 
localeconv(3C).
       The 
LC_MESSAGES variable affects the behavior of messaging functions
       such as 
dgettext(3C), 
gettext(3C), and 
gettxt(3C).
       A value of "C" for 
locale specifies the traditional 
UNIX system
       behavior. At program startup, the equivalent of       
setlocale(LC_ALL, "C")       is executed. This has the effect of initializing each category to the
       locale described by the environment "C".
       A value of "" for 
locale specifies that the locale should be taken
       from environment variables. The order in which the environment
       variables are checked for the various categories is given below:
       +-------------+-------------+-------------+-------------+
       |  Category   | 1st Env Var | 2nd Env Var | 3rd Env Var |
       +-------------+-------------+-------------+-------------+
       |LC_CTYPE:    | LC_ALL      | LC_CTYPE    | LANG        |
       +-------------+-------------+-------------+-------------+
       |LC_COLLATE:  | LC_ALL      | LC_COLLATE  | LANG        |
       +-------------+-------------+-------------+-------------+
       |LC_TIME:     | LC_ALL      | LC_TIME     | LANG        |
       +-------------+-------------+-------------+-------------+
       |LC_NUMERIC:  | LC_ALL      | LC_NUMERIC  | LANG        |
       +-------------+-------------+-------------+-------------+
       |LC_MONETARY: | LC_ALL      | LC_MONETARY | LANG        |
       +-------------+-------------+-------------+-------------+
       |LC_MESSAGES: | LC_ALL      | LC_MESSAGES | LANG        |
       +-------------+-------------+-------------+-------------+
       If a pointer to a string is given for 
locale, 
setlocale() attempts to
       set the locale for the given category to 
locale. If 
setlocale()       succeeds, 
locale is returned. If 
setlocale() fails, a null pointer is
       returned and the program's locale is not changed.
       For category 
LC_ALL, the behavior is slightly different. If a pointer
       to a string is given for 
locale and 
LC_ALL is given for 
category,       
setlocale() attempts to set the locale for all the categories to       
locale. The 
locale may be a simple locale, consisting of a single
       locale, or a composite locale. If the locales for all the categories
       are the same after all the attempted locale changes, 
setlocale() will
       return a pointer to the common simple locale. If there is a mixture
       of locales among the categories, 
setlocale() will return a composite
       locale.
RETURN VALUES
       Upon successful completion, 
setlocale() returns the string associated
       with the specified category for the new locale. Otherwise,       
setlocale() returns a null pointer and the program's locale is not
       changed.
       A null pointer for 
locale causes 
setlocale() to return a pointer to
       the string associated with the 
category for the program's current
       locale.  The program's locale is not changed.
       The string returned by 
setlocale() is such that a subsequent call
       with that string and its associated 
category will restore that part
       of the program's locale. The string returned must not be modified by
       the program, but may be overwritten by a subsequent call to       
setlocale().
ERRORS
       No errors are defined.
FILES
       /usr/lib/locale/locale                                 locale database directory for 
localeATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-------------------------+
       |  ATTRIBUTE TYPE    |     ATTRIBUTE VALUE     |
       +--------------------+-------------------------+
       |CSI                 | Enabled                 |
       +--------------------+-------------------------+
       |Interface Stability | Standard                |
       +--------------------+-------------------------+
       |MT-Level            | MT-Safe with exceptions |
       +--------------------+-------------------------+
SEE ALSO
       locale(1), 
ctype(3C), 
getdate(3C) gettext(3C), 
gettxt(3C),       
isdigit(3C), 
libc(3LIB), 
localeconv(3C), 
mbtowc(3C), 
strcoll(3C),       
strftime(3C), 
strptime(3C) strxfrm(3C) tolower(3C), 
wctomb(3C),       
attributes(7), 
environ(7), 
locale(7), 
standards(7)NOTES
       It is unsafe for any thread to change locale (by calling 
setlocale()       with a non-null locale argument) in a multithreaded application while
       any other thread in the application is using any locale-sensitive
       routine. To change locale in a multithreaded application, 
setlocale()       should be called prior to using any locale-sensitive routine. Using       
setlocale() to query the current locale is safe and can be used
       anywhere in a multithreaded application except when some other thread
       is changing locale.
       It is the user's responsibility to ensure that mixed locale
       categories are compatible. For example, setting 
LC_CTYPE=C and       
LC_TIME=ja (where 
ja indicates Japanese) will not work, because
       Japanese time cannot be represented in the "C" locale's ASCII
       codeset.
                             September 19, 2005                SETLOCALE(3C)