.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2014 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH duplocale 3 "3 мая 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ duplocale \- создаёт копию объекта локали .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBlocale_t duplocale(locale_t \fP\fIlocobj\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP \fBduplocale\fP(): .nf Since glibc 2.10: _XOPEN_SOURCE >= 700 Before glibc 2.10: _GNU_SOURCE .fi .SH ОПИСАНИЕ Функция \fBduplocale\fP() создаёт копию объекта локали, на которую указывает \fIlocobj\fP. .PP Если значение \fIlocobj\fP равно \fBLC_GLOBAL_LOCALE\fP, то \fBduplocale\fP() создаёт объект локали, содержащий копию глобальной локали, задаваемой \fBsetlocale\fP(3). .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, \fBduplocale\fP() returns a handle for the new locale object. On error, it returns \fI(locale_t)\ 0\fP, and sets \fIerrno\fP to indicate the error. .SH ОШИБКИ .TP \fBENOMEM\fP Недостаточно памяти для создания копии объекта локали. .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ glibc 2.3. .SH ЗАМЕЧАНИЯ Создание копии локали может пригодиться в следующих случаях: .IP \[bu] 3 Для создания копии объекта локали, в которой одна или более категорий будут изменены (с помощью \fBnewlocale\fP(3)). .IP \[bu] Для получения описателя текущей локали, который может использоваться в других функциях, таких как \fBtoupper_l\fP(3). Для этого \fBduplocale\fP() передаётся значение, полученное от следующего вызова: .IP .in +4n .EX loc = uselocale((locale_t) 0); .EE .in .IP This technique is necessary, because the above \fBuselocale\fP(3) call may return the value \fBLC_GLOBAL_LOCALE\fP, which results in undefined behavior if passed to functions such as \fBtoupper_l\fP(3). Calling \fBduplocale\fP() can be used to ensure that the \fBLC_GLOBAL_LOCALE\fP value is converted into a usable locale object. See EXAMPLES, below. .PP Каждый объект локали, созданный \fBduplocale\fP(), должен освобождаться с помощью \fBfreelocale\fP(3). .SH ПРИМЕРЫ Представленная ниже программа использует \fBuselocale\fP(3) и \fBduplocale\fP() для получения описателя текущей локали, который затем передаётся в \fBtoupper_l\fP(3). Программа распознаёт один аргумент командной строки, строку символов, которая приводится к верхнему регистру и выводится в стандартный вывод. Пример использования: .PP .in +4n .EX $ \fB./a.out abc\fP ABC .EE .in .SS "Исходный код программы" .\" SRC BEGIN (duplocale.c) \& .EX #define _XOPEN_SOURCE 700 #include #include #include #include \& #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e } while (0) \& int main(int argc, char *argv[]) { locale_t loc, nloc; \& if (argc != 2) { fprintf(stderr, "Usage: %s string\en", argv[0]); exit(EXIT_FAILURE); } \& /* This sequence is necessary, because uselocale() might return the value LC_GLOBAL_LOCALE, which can\[aq]t be passed as an argument to toupper_l(). */ \& loc = uselocale((locale_t) 0); if (loc == (locale_t) 0) errExit("uselocale"); \& nloc = duplocale(loc); if (nloc == (locale_t) 0) errExit("duplocale"); \& for (char *p = argv[1]; *p; p++) putchar(toupper_l(*p, nloc)); \& printf("\en"); \& freelocale(nloc); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМ. ТАКЖЕ" \fBfreelocale\fP(3), \fBnewlocale\fP(3), \fBsetlocale\fP(3), \fBuselocale\fP(3), \fBlocale\fP(5), \fBlocale\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .