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/。

