科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Tuxedo数据buffer基本类型介绍

Tuxedo数据buffer基本类型介绍

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Tuxedo数据buffer基本类型介绍

作者:chinaunix 来源:chinaunix 2007年10月5日

关键字: 应用 技术 Tuxedo 中间件

  • 评论
  • 分享微博
  • 分享邮件

  Tuxedo数据buffer基本类型介绍

  

  一、 课程目标

  通过本课程学习,你可以掌握如下知识:

  掌握tuxedo中STRING类型buffer的用途

  掌握tuxedo中CARRAY类型buffer的用途

  掌握tuxedo中FML(FML32)类型buffer的用途

  掌握tuxedo中VIEW(VIEW32)类型buffer的用途

  注:后续的课程将介绍Tuxedo新增的数据类型:EFML(Embedded Record in FML)、XML Buffer

  二、 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);

  三、 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类型使用方法和调用方法

  四、 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 null

  

  long count COUNT 1 - - “” 0

  

  float sumfee SUMFEE 1 - - 0.0

  

  string usrname USRNAME 1 - 80 “”

  

  short num NUM 1 - - 0

  

  END

  

  (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);

  …………………

  五、 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 */

  

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

  

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

  

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

  

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

  

  #defineNUM((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函数在后续的文章有详细的介绍和代码分析.

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章