装载LC_CTYPE初探
2009-05-13 02:03:06来源:未知 阅读 ()
系统装载locale设置的时候,首先会找locale的目录,然后对系统locale环境设置进行检测,之后设置系统地locale,对每个种类的locale进行装载,在装载LC_CTYPE的时候,根据LC_CTYPE的值来进行mbwc的初始化配置:-)
主要的代码实现在 /usr/src/lib/libc/locale/setrunelocale.c 中的setrunelocale()函数中:
static int __setrunelocale(const char *encoding)
{
FILE *fp; //用于打开LC_CTYPE文件
char name[PATH_MAX];
_RuneLocale *rl;
int saverr, ret;
static char ctype_encoding[ENCODING_LEN + 1];
static _RuneLocale *CachedRuneLocale;
static int Cached__mb_cur_max;
static size_t (*Cached__mbrtowc)(wchar_t * __restrict,
const char * __restrict, size_t, mbstate_t * __restrict);
static size_t (*Cached__wcrtomb)(char * __restrict, wchar_t,
mbstate_t * __restrict);
static int (*Cached__mbsinit)(const mbstate_t *);
static size_t (*Cached__mbsnrtowcs)(wchar_t * __restrict,
const char ** __restrict, size_t, size_t, mbstate_t * __restrict);
static size_t (*Cached__wcsnrtombs)(char * __restrict,
const wchar_t ** __restrict, size_t, size_t,
mbstate_t * __restrict);
/*
* The "C" and "POSIX" locale are always here.
*/
if (strcmp(encoding, "C") == 0 || strcmp(encoding, "POSIX") == 0) {
_none_init(&_DefaultRuneLocale);
return (0);
}
/*
* If the locale name is the same as our cache, use the cache.
*/
if (CachedRuneLocale != NULL &&
strcmp(encoding, ctype_encoding) == 0) {
_CurrentRuneLocale = CachedRuneLocale;
__mb_cur_max = Cached__mb_cur_max;
__mbrtowc = Cached__mbrtowc;
__mbsinit = Cached__mbsinit;
__mbsnrtowcs = Cached__mbsnrtowcs;
__wcrtomb = Cached__wcrtomb;
__wcsnrtombs = Cached__wcsnrtombs;
return (0);
}
__mbrtowc,__mbsinit,__mbsnrtowcs,__wcrtomb,__wcsnrtombs都是函数指针,可以根据locale的不同,指向不同语言区域的处理函数
/*
* Slurp the locale file into the cache.
*/
/* Range checking not needed, encoding length already checked before */
(void) strcpy(name, _PathLocale);
(void) strcat(name, "/");
(void) strcat(name, encoding);
(void) strcat(name, "/LC_CTYPE");
加工name,保存LC_CTYPE文件的具体路径
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:FreeBSD下动态库路径的问题
下一篇:(转载.整理)KDE简介
- DragonFly BSD 2.2.1发布 2009-05-13
- NetBSD笔记 2009-05-13
- Electric shanghai massage adevice is difficult to 2009-05-13
- vbox联网搞定 2009-05-13
- 分析squid的日志,罗列出一天最多的点击url 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash