Tuxedo数据buffer基本类型介绍

uxedo数据buffer基本类型介绍数据结构

 
  1、 课程目标
经过本课程学习,你能够掌握以下知识:
  • 掌握tuxedo中STRING类型buffer的用途
  • 掌握tuxedo中CARRAY类型buffer的用途
  • 掌握tuxedo中FML(FML32)类型buffer的用途
  • 掌握tuxedo中VIEW(VIEW32)类型buffer的用途
    注:后续的课程将介绍Tuxedo新增的数据类型:EFML(Embedded Record in FML)、XML Buffer

    2、 String类型buffer介绍
    (1)STRING类型buffer简介
    STRING类型buffer是主要用于面向行、变长度的文本信息类型buffer。STRING类型buffer要求必须以NULL做为结束符的。若是系统采用STRING类型,那么在配置ubbconfig文件时,必须在*MACHINE部分配置TYPE,指明buffer类型为STRING类型。在两种不一样类型架构的机器进行buffer传输时候,TUXEDO对STRING类型buffer进行加码、解码过程。不管系统申请了多少长度的buffer,系统自动按着NULL所在的位置决定STRING类型的buffer长度。
    (2)STRING类型buffer如何申请
    char *SndBuf;
    SndBuf = (char *) tpalloc("STRING",NULL,1024)
    (3)STRING类型使用方法和调用方法
    strcpy(SndBuf,"Bea Tuxedo");
    tpcall("TOUPPER",SndBuf,0,&RcvBuf,&len,0);

    3、 CARRAY类型buffer介绍
    (1)CARRAY类型buffer简介
    CARRAY类型buffer是一种独立于机器的buffer类型。用户在使用时必须指定CARRAY类型数据的长度,CARRAY类型数据能够包含NULL字符。CARRAY类型数据不须要加、解码过程。CARRAY类型数据能够用来传输汉字、二进制数据、文件、图形等。CARRAY类型能够做为FML(FML32)、VIEW(VIEW32)的数据类型子项buffer。
    (2)CARRAY类型buffer如何申请
    tpalloc("CARRAY",NULL,1024*2)
    (3)CARRAY类型使用方法和调用方法

    4、 VIEW(VIEW32)类型buffer介绍
    (1)VIEW类型buffer简介
    Tuxedo使用VIEW类型buffer处理相似C语言的结构等数据类型复杂数据。使用VIEW类型buffer能够将各数据元素与一种结构数据类型结合,经过结构就能够访问各数据元素。VIEW类型数据即便没有没有数据也占用空间,结构发生变化,须要从新编译程序。
    注明:(VIEW类型buffer是16位寻址的,VIEW32是32位寻址的.)

    (2)VIEW类型buffer使用方法
    使用VIEW类型数据步骤:架构

  • 创建VIEW文件
  • 设置环境变量
  • 编译VIEW文件
  • 在代码中包含VIEW头文件,在程序中使用VIEW结构及API函数
  • 编译程序
  • 运行程序
    (1)创建VIEW文件
     

    VIEW user函数

     

     

    * VIEW structure for user information */学习

     

     

    #type   cname   fbname  count flag size nullspa

     

     

    long    count COUNT 1      -    -  “”    0orm

     

     

    float   sumfee  SUMFEE   1      -    -     0.0ci

     

     

    string  usrname USRNAME 1      -    80   “”get

     

     

    short   num      NUM      1      -    -     0string

     

     

    ENDio

     

     

     

     

     


    (2)设置环境变量
    /* view文件存放路径,使用冒号分割(NT用分号)*/
    VIEWDIR=/inc
    /* 用逗号分割的二进制view文件 */
    VIEWFILES=user.V 
    export VIEWDIR VIEWFILES

    (3)编译VIEW文件

  • 使用viewc(viewc32)编译view文件
    -n user.v
  • view命令简介:
    viewc [-n] [-d viewdir] viewfile [viewfile ...]
    或者:
    viewc32 [-n] [-d viewdir] viewfile [viewfile ...]
    [-d viewdir]:指定输出文件的路径(默认在当前目录下)
    [-n]:指定在编译view结构类型数据不产生FML buffer数据结构

    (4)view编译后生成的头文件
     

    struct user {

     

     

     /* VIEW structure for user information */

     

     

        long      count;

     

     

        float     sumfee;

     

     

        char      usrname[80];

     

     

        short  num;

     

     

    };

     

     



    (5)VIEW类型buffer的使用
    struct user *pszUser;
    pszUser=(struct user *)tpalloc("VIEW"," user",sizeof(user));
    …………………
    pszUser ->count = 1680;
    pszUser ->sumfee = 198.96;
    strcpy(pszUser->usrname,"Wsy");
    pszUser->num = 160;
    …………………
    tpcall("PSVC",(char *)pszUser,0,(char **)&pszUser,&rcvlen,0);
    …………………

    5、 FML(FML32)类型buffer介绍
    (1)VIEW类型buffer简介
    FML类型buffer容许存取多个命名的字段。例如:(NAME: "BEA",ADDRESS "China Beijing",PHONE "010-85281188")。每个命名的字段能够在buffer中存放零个或更多个(occurrences)的值.
    注明:(FML类型buffer是16位寻址的,FML32是32位寻址的.)


    (2)FML支持的数据类型:
  • Short
  • Char
  • Long
  • Float
  • Double
  • String
  • Carray
    (3)FML类型buffer使用方法
    使用FML类型数据步骤:
  • 创建FML文件
  • 设置环境变量
  • 编译FML文件
  • 在代码中包含FML头文件,在程序中使用FML API函数
  • 编译程序
  • 运行程序
    (1)创建FML Field Table文件

    *base 1000

     

     

    # name   number type flags comments

     

     

    COUNT    1        long    -   -

     

     

    SUMFEE   2        float   -  -

     

     

    USRNAME  3        string -   -

     

     

    NUM       4        short  -   -

     

     


    (2)设置环境变量
    set FLDTBLDIR32="c: uxedowsy"
    set FIELDTBLS32=user.fld
    其中:
    FLDTBLDIR(FLDTBLDIR32):指明Field Table文件的名字,多个用逗号分割
    FIELDTBLS (FIELDTBLS32):Filed Table文件的所在路径,多个用冒号分割,在WinNT系统中使用分号分割.
    (3)编译FML Field Table文件
  • 使用mkfldhdr(mkfldhdr32)编译Field Table文件
    user.fld
    (4)FML Field Table编译后生成的头文件
     

    /*  fname   fldid            */

     

     

    /*  -----   -----            */

     

     

    #define COUNT   ((FLDID32)33555433) /* number: 1001 type: long */

     

     

    #define SUMFEE  ((FLDID32)100664298)/* number: 1002 type: float */

     

     

    #define USRNAME ((FLDID32)167773163)/* number: 1003 type: string */

     

     

    #define NUM ((FLDID32)1004) /* number: 1004 type: short */

    (5)FML类型buffer的使用 FBFR32 *SndBuf; SndBuf = (FBFR32 *)tpalloc("FML32",NULL,1024); ………………… lCount = 1680; Fchg32(SndBuf, COUNT,0,(char *)&lCount ,0); fSumFee = 198.96; Fchg32(SndBuf, SUMFEE, (char *)&fSumFee,0); Strcpy(sUsrName , "wsy"); Fchg32(SndBuf, USRNAME, (char *)sUsrName,0); iNum = 160; Fchg32(SndBuf, SUMFEE, (char *)&iNum,0); ………………… tpcall("PSVC",(char *) SndBuf,0,(char **)& SndBuf,&rcvlen,0); Fget32(SndBuf, COUNT,0, (char *)&lCount ,0); Fget32(SndBuf, USRNAME,0, (char *)sUsrName,0); ………………… 注:FML和VIEW类型buffer的API函数在后续的文章有详细的介绍和代码分析.
相关文章
相关标签/搜索