• 关于catopen函数


    关于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 ",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

  • 相关阅读:
    2019.10.11CSS
    2019.10.11 THML
    虚拟机FAQ
    thinkpad安装虚拟机 开启虚拟功能要在bios的security里面设置
    JDK在windows系统下环境变量的设置
    有关operamasks-ui的一些信息汇总
    从用List给ArrayList赋值看容器的传值,最好用.addAll
    给eclipse安装svn插件
    Java接口 枚举型Enumeration
    linux下的grep命令
  • 原文地址:https://www.cnblogs.com/honglihua8688/p/3709020.html
Copyright © 2020-2023  润新知