duplocale(3) Library Functions Manual duplocale(3) duplocale - (libc -lc) #include locale_t duplocale(locale_t locobj); glibc ( feature_test_macros(7)): duplocale(): glibc 2.10: _XOPEN_SOURCE >= 700 glibc 2.10: _GNU_SOURCE duplocale() locobj. locobj LC_GLOBAL_LOCALE duplocale() setlocale(3). duplocale() . (locale_t) 0 errno . ENOMEM . POSIX.1-2008. glibc 2.3. : o ( newlocale(3)). o toupper_l(3). duplocale() : loc = uselocale((locale_t) 0); uselocale(3) LC_GLOBAL_LOCALE toupper_l(3). duplocale() LC_GLOBAL_LOCALE . . duplocale() freelocale(3). uselocale(3) duplocale() toupper_l(3). . : $ ./a.out abc; ABC #define _XOPEN_SOURCE 700 #include #include #include #include #include int main(int argc, char *argv[]) { locale_t loc, nloc; if (argc != 2) { fprintf(stderr, "Usage: %s string\n", argv[0]); exit(EXIT_FAILURE); } /* This sequence is necessary, because uselocale() might return the value LC_GLOBAL_LOCALE, which can't be passed as an argument to toupper_l(). */ loc = uselocale((locale_t) 0); if (loc == (locale_t) 0) err(EXIT_FAILURE, "uselocale"); nloc = duplocale(loc); if (nloc == (locale_t) 0) err(EXIT_FAILURE, "duplocale"); for (char *p = argv[1]; *p; p++) putchar(toupper_l(*p, nloc)); printf("\n"); freelocale(nloc); exit(EXIT_SUCCESS); } freelocale(3), newlocale(3), setlocale(3), uselocale(3), locale(5), locale(7) 3 . . : . 6.18 8 2026 duplocale(3)