DUPLOCALE - Linux手册页
时间:2019-08-20 18:00:09 来源:igfitidea点击:
Linux程序员手册 第3部分
更新日期: 2020-06-09
名称
duplocale-复制语言环境对象
语法
#include <locale.h> locale_t duplocale(locale_t locobj);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
duplocale():
- Since glibc 2.10:
- _XOPEN_SOURCE>= 700
- Before glibc 2.10:
- _GNU_SOURCE
说明
duplocale()函数创建由locobj引用的语言环境对象的副本。
如果locobj为LC_GLOBAL_LOCALE,则duplocale()创建一个语言环境对象,该对象包含由setlocale(3)确定的全局语言环境的副本。
返回值
成功后,duplocale()返回新语言环境对象的句柄。发生错误时,它将返回(locale_t)0,并设置errno以指示错误原因。
错误说明
- ENOMEM
- 内存不足,无法创建重复的语言环境对象。
版本
duplocale()函数首次出现在GNU C库的2.3版中。
遵循规范
POSIX.1-2008。
备注
复制语言环境可以达到以下目的:
- *
- 创建将在其中修改多个类别之一的语言环境对象的副本(使用newlocale(3))。
- *
- 获取当前语言环境的句柄,该句柄可以在其他使用语言环境句柄的函数中使用,例如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
Program source
#define _XOPEN_SOURCE 700 #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <locale.h> #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \ } while (0) int main(int argc, char *argv[]) { locale_t loc, nloc; char *p; 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 canaqt 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 (p = argv[1]; *p; p++) putchar(toupper_l(*p, nloc)); printf("\n"); freelocale(nloc); exit(EXIT_SUCCESS); }
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。