Tuxedo数据buffer基本类型介绍

2024-03-04 00:08

本文主要是介绍Tuxedo数据buffer基本类型介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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=$APPDIR/inc
    /* 用逗号分割的二进制view文件 */
    VIEWFILES=user.V
    export VIEWDIR VIEWFILES

    (3)编译VIEW文件

  • 使用viewc(viewc32)编译view文件
    $viewc -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:\tuxedo\wsy"
    set FIELDTBLS32=user.fld
    其中:
    FLDTBLDIR(FLDTBLDIR32):指明Field Table文件的名字,多个用逗号分割
    FIELDTBLS (FIELDTBLS32):Filed Table文件的所在路径,多个用冒号分割,在WinNT系统中使用分号分割.
    (3)编译FML Field Table文件
  • 使用mkfldhdr(mkfldhdr32)编译Field Table文件
    $mkfldhdr32 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函数在后续的文章有详细的介绍和代码分析.

这篇关于Tuxedo数据buffer基本类型介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/771373

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装