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函數在後續的文章有詳細的介紹和代碼分析.
相關文章
相關標籤/搜索