.\" -*- coding: UTF-8 -*- .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH duplocale 3 "17 мая 2025 г." "Справочные страницы Linux 6.15" .SH НАИМЕНОВАНИЕ duplocale \- создаёт копию объекта локали .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP,\ \fI\-lc\fP) .SH ОБЗОР .nf \fB#include \fP .P \fBlocale_t duplocale(locale_t \fP\fIlocobj\fP\fB);\fP .fi .P .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .P \fBduplocale\fP(): .nf Начиная с glibc 2.10: _XOPEN_SOURCE >= 700 До glibc 2.10: _GNU_SOURCE .fi .SH ОПИСАНИЕ Функция \fBduplocale\fP() создаёт копию объекта локали, на которую указывает \fIlocobj\fP. .P Если значение \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. .P Каждый объект локали, созданный \fBduplocale\fP(), должен освобождаться с помощью \fBfreelocale\fP(3). .SH ПРИМЕРЫ Представленная ниже программа использует \fBuselocale\fP(3) и \fBduplocale\fP() для получения описателя текущей локали, который затем передаётся в \fBtoupper_l\fP(3). Программа распознаёт один аргумент командной строки, строку символов, которая приводится к верхнему регистру и выводится в стандартный вывод. Пример использования: .P .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); \[rs] } while (0) \& int main(int argc, char *argv[]) { locale_t loc, nloc; \& if (argc != 2) { fprintf(stderr, "Usage: %s string\[rs]n", 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("\[rs]n"); \& 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 , Иван Павлов и Kirill Rekhov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .