探寻Locale原理“/usr/src/lib/libc/locale/setl…

2009-05-13 02:01:05来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

在setlocale.c文件中,包含了很多关于Locale的信息和处理函数

1、一个重要的字符指针数组:

/*
* Category names for getenv()
*/
static char *categories[_LC_LAST] = {
    "LC_ALL",
    "LC_COLLATE",
    "LC_CTYPE",
    "LC_MONETARY",
    "LC_NUMERIC",
    "LC_TIME",
    "LC_MESSAGES",
};
2、初始化,上面的那些Locale种类都设置成“C"
/*
* Current locales for each category
*/
static char current_categories[_LC_LAST][ENCODING_LEN + 1] = {
    "C",
    "C",
    "C",
    "C",
    "C",
    "C",
    "C",
};
3、一些函数声明和变量的定义:
/*
* Path to locale storage directory
*/
char *_PathLocale; //用来保存Locale的目录
/*
* The locales we are going to try and load
*/
static char new_categories[_LC_LAST][ENCODING_LEN + 1];   
static char saved_categories[_LC_LAST][ENCODING_LEN + 1];

static char current_locale_string[_LC_LAST * (ENCODING_LEN + 1/*"/"*/ + 1)];
/*"/"*/ -----是个注释,表示里面要存放有“/”的目录名
static char *currentlocale(void);  //获取locale
static char *loadlocale(int);   //装载locale
static const char *__get_locale_env(int);  //获得环境变量,明确locale的位置。
4、currentlocale 函数

static char * currentlocale()
{
  int i;
(void)strcpy(current_locale_string,current_categories[1]);
for (i = 2; i



2006年1月29日更新:

一个非常重要的函数:setlocale(category, locale),用来设置locale.

大致的流程是:

1、进行参数检测
2、拷贝参数locale的值到new_categories
3、调用loadlocale(category)函数:

switch (category) {
case LC_CTYPE:
  func = __wrap_setrunelocale;
  break;
case LC_COLLATE:
  func = __collate_load_tables;
  break;
case LC_TIME:
  func = __time_load_locale;
  break;
case LC_NUMERIC:
  func = __numeric_load_locale;
  break;
case LC_MONETARY:
  func = __monetary_load_locale;
  break;
case LC_MESSAGES:
  func = __messages_load_locale;
  break;

每个Case都是一个函数调用,用来装载特定种类的locale

例如:LC_CTYPE的case,调用的函数是__wrap_setrunelocale,这个函数的实现在同目录的setrunelocale.c文件中,用来读取对应的LC_CTYPE文件内容,针对选择的locale进行系统设置

在这个文件中,还包括两个函数:

static const char * __get_locale_env(category)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:探寻Locale原理---锁定源代码

下一篇:nice mirror site