首页 > 其他 > 详细

关于catopen函数

时间:2014-05-09 11:39:26      阅读:624      评论:0      收藏:0      [点我收藏+]

关于catopen函数:

参考网址:http://pubs.opengroup.org/onlinepubs/009695399/functions/catopen.html

 

1)编辑消息文件

[root@Master catlogTest]# vi msg1.euc

  1 Hello msg1.euc 1

  2 Hello msg2.euc 2

  3 Hello msg3.euc 3

  4 Hello msg4.euc 4

 

[root@Master catlogTest]# vi msg1.sjis

       1 Hello msg1.sjis 1

       2 Hello msg2.sjis 2

       3 Hello msg3.sjis 3

       4 Hello msg4.sjis 4

2)用gencat生成cat文件

[root@Master catlogTest]# gencat msg1.euc.cat msg1.euc

[root@Master catlogTest]# ls

msg1.euc  msg1.euc.cat  msg1.sjis

[root@Master catlogTest]# gencat msg2.sjis.cat msg1.sjis

[root@Master catlogTest]# ls

msg1.euc  msg1.euc.cat  msg1.sjis  msg2.sjis.cat

 

3)使用catopen等函数调用消息

#include <stdio.h>

 #include <locale.h>

 #include <nl_types.h>

 int main()

 {

    nl_catd catid = NULL;

    char *fstr;

    char *s1;

    

    setlocale(LC_ALL,"");

   

     catid = catopen("/root/honglihua/catlogTest/msg1.euc.cat",NL_CAT_LOCALE);

     if((int)catid == -1)

      {

            fprintf(stdout,":Can‘t open message catlog");

             return -1;

       }

    

     fstr = (char *)catgets(catid,1,1,"default string");

     fprintf(stdout,"%s\n",fstr);

    

     catclose(catid);

    

     return 0;

          }

编译:

[root@Master catlogTest]# gcc -o catopenTest catopenTest.c

执行:

[root@Master catlogTest]# ./catopenTest

Hello msg1.euc 1

 

如果

fstr = (char *)catgets(catid,1,2,"default string");

执行结果为:

[root@Master catlogTest]# ./catopenTest

Hello msg2.euc 2

 

如果catopen第一个参数不带路径,则可以设置NLSPATH环境变量如下:
setenv NLSPATH /usr/lib/locale/%L/LC_MESSAGES/%N
(%L会被$LANG代替;%N会被catopen中的hello代替)
在调用:
catopen("hello", NL_CAT_LOCALE)时,
会去/usr/lib/locale/en_US/LC_MESSAGES/hello
这个路径寻找消息文件

 

补充:

经过测试,得出当catopen的满足如下条件值时, %L会按照LC_ALL > LC_MESSAGES > LANG的优先值顺序进行替换。

1)catopen的第一个参数不为路径

2)catopen的第二个参数为NL_CAT_LOCALE(如果第二个参数为0,%L会被$LANG代替)

3)设置了环境变量NLSPATH,且该变量所指的路径中使用%L

关于catopen函数,布布扣,bubuko.com

关于catopen函数

原文:http://www.cnblogs.com/honglihua8688/p/3709020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!