NL_LANGINFO(3) | Руководство программиста Linux | NL_LANGINFO(3) |
nl_langinfo, nl_langinfo_l - запрашивает информацию о языке и локали
#include <langinfo.h>
char *nl_langinfo(nl_item item);
char *nl_langinfo_l(nl_item item, locale_t locale);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
nl_langinfo_l():
Функция nl_langinfo() и nl_langinfo_l() предоставляют более гибкий способ доступа к информации локали, нежели localeconv(3). Функция nl_langinfo() возвращает строку со значением, соответствующим item, из текущей глобальной локали программы. Функциями nl_langinfo() возвращает строку со значением, соответствующим item, из локали, которая определена объектом локали locale (ранее создан с помощью newlocale(1)). Могут быть запрошены индивидуальные, либо дополнительные элементы категорий локали.
В качестве запрашиваемых элементов локали в поле item могут быть указаны определённые в <langinfo.h> константы:
Список вышеперечисленных элементов — это всего лишь небольшая часть того, что может быть запрошено. Более подробный список приведён в справочном руководстве по библиотеке GNU C.
При успешном выполнении данные функции возвращают указатель на строку, которая содержит значение соответствующего item из указанной локали.
Если с помощью setlocale(3) не была выбрана локаль для соответствующей категории, то nl_langinfo возвращает указатель на соответствующую строку локали «C». Это же верно и для nl_langinfo_l(), если locale задаёт локаль, в которой не определены данные langinfo.
Если задано неправильное значение item, то возвращается указатель на пустую строку.
Указатель, возвращаемый этими функциями, может указывать на статические данные, которые могут быть перезаписаны, или сам указатель может стать некорректным при последующих вызовах nl_langinfo, nl_langinfo_l() или setlocale(3). Это же утверждение применимо и к nl_langinfo_l(), если объект локали, на которую указывает locale, освобождается или изменяется функциями freelocale(3) или newlocale(3).
В POSIX указано, что приложение не может изменить строку, возвращаемую этими функциями.
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
nl_langinfo() | Безвредность в нитях | MT-Safe locale |
POSIX.1-2001, POSIX.1-2008, SUSv2.
Поведение nl_langinfo_l() не определено, если значение locale равно специальному объекту локали LC_GLOBAL_LOCALE или некорректному описателю объекта локали.
Следующая программа настраивает кодировку символов и чисел локали в соответствии с окружением и запрашивает кодировку символов терминала и основание системы счисления.
#include <langinfo.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { setlocale(LC_CTYPE, ""); setlocale(LC_NUMERIC, ""); printf("%s\n", nl_langinfo(CODESET)); printf("%s\n", nl_langinfo(RADIXCHAR)); exit(EXIT_SUCCESS); }
locale(1), localeconv(3), setlocale(3), charsets(7), locale(7)
Справочное руководство по библиотеке GNU C (GNU C Library Reference Manual)
2019-03-06 | GNU |