- 浏览: 220115 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
julyboxer:
http://www.baobao5u.com/Product ...
喝茶的十八个层次,你属于哪一层? -
xiaolong0211:
呵呵,学习了,这两天一直在装gcc,可算装上了,谢谢
Red Hat enterprise 5 gcc安装顺序 -
run_xiao:
翻译的不是很到位啊
推荐引擎mahout相关资料 -
julyboxer:
关键价值链
B2C网络站点资源梳理 -
julyboxer:
要买的书http://product.dangdang.com ...
B2C网络站点资源梳理
1.概述
2.域表文件
3.域头文件
4.mkfldhdr(32)工具
5.环境变量
6.Falloc(Falloc32)
7.Fsizeof(Fsizeof32)
8.Fneeded(Fneeded32)
9.Finit(Finit32)
10.Fadd(Fadd32)
11.Fchg(Fchg32)
12.Fget(Fget32)
13.Fcpy(Fcpy32)
14.输入/输出函数
15.Fvftos(Fvftos32)
16.Fvstof(Fvstof32)
1.概述
基本概念
Field Manipulation Language (FML)或(FML32)可以定义多个有名字的域,它是一张属性和值的表。
支持的域数据类型有:short、char、long、float、double、string、carray。
FML(FML32)buffer通过一套API来管理,大约有60多个函数接口。
FML有较强大的功能,使用也很灵活。缺点是接口较复杂,有很多的处理函数,而且使用效率较VIEW等要慢。
FML的基本组成部分
FML buffer的域通过域ID(数字)来访问。处理FML buffer至少需要如下四个部分:
- 域表文件。提供名字-数字映射;
- 域头文件。提供C程序一些生成的宏而不是数字来访问域;
- 环境变量FIELDTBLS(32)和FLDTBLDIR(32)定位表文件;
- C语言接口:
库:libfml.a和libfml32.a;
头文件:fml.h和fml32.h;
处理16位到32位转换代码:fml1632.h。
FML buffer的结构
一个域buffer有三部分组成:buffer头部、数据域和索引项。
处理FML的流程
定义所有的域名字、对应的数据类型和数字标识。数字标识100以下为系统保留,对16位buffer,数字标识的范围是100-8191,32位buffer是100-33,554,431。
根据这些定义编辑一个域表文件。
使用mkfldhdr(32)生成域头文件。
编译应用程序,使用生成的头文件和fml.h(fml32.h),链接libfml.a(libfml32.a)。
正确设置环境变量FIELDTBLS(32)和FLDTBLDIR(32)。
2.域表文件
文件形式如下:
*base 100
# name number type flags comments
ACCOUNT_ID 10 long - -
ACCT_TYPE 11 char - -
ADDRESS 09 string - -
AMOUNT 16 float - -
文件中以#开头的行被忽略。
文件中以$开头的行也被忽略,但会被拷贝到后面生成的头文件。
文件以*base开头的行指出后面的域号的基本偏移。
每个域有以下部分组成:
- name:域的名字;
- rel-number:域的编号,它是一个相对当前base的数字;
- type:数据类型;
- flag:标志。保留;
- comment:注释。
该文件用来生成头文件,并在函数调用里使用。
3.域头文件
与域表文件对应的头文件形式如下:
/* fname fldid */
/* ----- ----- */
#define ACCOUNT_ID ((FLDID)8302)
/* number: 110 type: long */
#define ACCT_TYPE ((FLDID)16495)
/* number: 111 type: char */
#define ADDRESS ((FLDID)41069)
/* number: 109 type: string */
#define AMOUNT ((FLDID)24692)
/* number: 116 type: float */
4.mkfldhdr(32)工具
mkfldhdr(mkfldhdr32)工具将环境变量FIELDTBLS指定的域表文件对应生成一个C头文件,头文件的命名是在域表文件名后加后缀(.h)。缺省目标文件放在当前目录下,可以指定选项-d来指定生成的头文件存放位置。
使用举例:
FLDTBLDIR=/project/fldtbls; export FLDTBLDIR
FIELDTBLS=maskftbl,DBftbl,miscftbl; export FIELDTBLS
mkfldhdr maskftbl
mkfldhdr DBftbl
mkfldhdr miscftbl
5.环境变量
FIELDTBLS (FIELDTBLS32):以逗号分隔每个域表文件;
FLDTBLDIR (FLDTBLDIR32):以冒号分隔域表文件存放的路径列表。
注意列表中间不能插入空白字符。
6.Falloc(Falloc32)
使用malloc动态分配fielded buffer的存储空间并调用Finit进行初始化。
#include <stdio.h>
#include <fml.h>
FBFR *Falloc (FLDOCC F, FLDLEN V);
#include <fml32.h>
FBFR32 *Falloc32 (FLDOCC32 F, FLDLEN32 V);
参数分别是域的个数和空间的字节数。
失败时返回NULL并设置全局变量Ferror。
失败原因:
- FMALLOC:malloc失败;
- FEINVAL:参数非法。
注意:该函数分配的空间只用于内部处理,不能用于tpcall()和tpacall()。
7.Fsizeof(Fsizeof32)
返回给定的FML buffer的大小。
long Fsizeof (FBFR *fbfr);
long Fsizeof32 (FBFR32 *fbfr32);
参数说明:
fbfr:buffer指针。
8.Fneeded(Fneeded32)
计算buffer需要的空间大小。
#include <stdio.h>
#include <fml.h>
long Fneeded (FLDOCC F, FLDLEN V);
#include <fml32.h>
long Fneeded32 (FLDOCC32 F, FLDLEN32 V);
失败返回-1。
失败原因:
FEINVAL:非法参数。
9.Finit(Finit32)
用于清除一个存在FML buffer的内容以便重新使用它。对于使用Falloc和tpalloc分配的buffer该函数不是必须的。
int Finit(FBFR *fbfr, FLDLEN buflen);
int Finit32(FBFR32 *fbfr, FLDLEN32 buflen);
参数说明:
bffr:要处理的buffer指针;
buflen:清理的空间字节数。
使用举例:
FBFR * fbfr;
fbfr = (FBFR *) tpalloc(“FML”,NULL,Fneeded(5,200));
...
Finit(fbfr,Fsizeof(fbfr));
10.Fadd(Fadd32)
往buffer中的某个域填值,同一个域可以填多次,按下标0、1,2…依次存放。
int Fadd(FBFR *fbfr, FLDID fieldid, char *value, FLDLEN len);
int Fadd32(FBFR32 *fbfr, FLDID32 fieldid, char *value, FLDLEN32 len);
参数说明:
fbfr:FML buffer指针;
fieldid:域ID号;
value:值存放的地址(char *类型)。当数据不是string或carray时要强制转化;
len:域长度。只对carray类型有效。
失败返回-1。
使用举例:
long db_id;
...
(void)Fadd(reqfb, ACCOUNT_ID, (char *)&db_id, (FLDLEN)0);
char *t_amts;
...
if (Fadd(reqfb, SAMOUNT, t_amts, (FLDLEN)0) == -1)
(void)printf(“Fadd failed with error: %d\n”, Ferror);
char *t_amts;
...
if (Fadd32(reqfb, SAMOUNT, t_amts, (FLDLEN32)0) == -1)
(void)printf(“Fadd32 failed with error: %d\n”, Ferror32);
11.Fchg(Fchg32)
修改域的值。
int Fchg(FBFR *fbfr, FLDID fieldid,int occ, char *value, FLDLEN len);
int Fchg32(FBFR32 *fbfr, FLDID32 fieldid,int occ, char *value, FLDLEN32 len);
参数说明:
fbfr:FML buffer指针;
fieldid:域ID号;
occ:域的下标。从0开始计算,-1表示增加值;
value:值的地址(char *);
len:域长度。只对carray类型有效。
失败返回-1。
若域指定下标当前没有值,则增加该下标的值。
使用举例:
char *t_amts;
...
if (Fchg(reqfb,SAMOUNT, 0, t_amts,(FLDLEN)0) == -1)
(void)printf(“Fchg failed with error: %s”,Fstrerror(Ferror));
12.Fget(Fget32)
取域的值。
int Fget(FBFR *fbfr, FLDID fieldid,int occ, char *value, FLDLEN *maxlen);
int Fget32(FBFR32 *fbfr, FLDID32 fieldid,int occ, char *value, FLDLEN32 *maxlen);
参数说明:
fbfr:FML buffer指针;
fieldid:域ID号;
occ:域的下标。从0开始计算,-1表示增加值;
value:存放地址(char *);
maxlen:最大长度的指针,返回时被置为实际长度。
失败返回-1。
若当前空间不足以存放实际的值,函数并不截断数据,而是返回-1。
使用举例:
FLDLEN len2;
long amount;
. . .
len2 = sizeof(amount);
(void)Fget(transf, MID_INIT, 3, (char *) &amount, &len2);
13.Fcpy(Fcpy32)
进行FML buffer的拷贝。
int Fcpy(FBFR *dest, FBFR *src);
int Fcpy32(FBFR32 *dest, FBFR32 *src);
失败返回-1。
函数认为两者都是FML buffer,当目标buffer足够大时进行复制。
14.输入/输出函数
int Fprint(FBFR *fbfr);
int Fprint32(FBFR32 *fbfr);
以可读形式打印FML buffer的内容,输出到标准输出。
int Ffprint(FBFR *fbfr, FILE *iop);
int Ffprint32(FBFR32 *fbfr, FILE *iop);
同上,但输出到指定的流中。
int Fextread(FBFR *fbfr, FILE *iop);
int Fextread32(FBFR32 *fbfr, FILE *iop);
从流中读取数据到buffer中。
参数说明:
fbfr:buffer指针;
iop:输入/输出流。
格式的说明见ud部分的说明。
15.Fvftos(Fvftos32)
把FML buffer的数据拷贝到VIEW C结构中。
int Fvftos(FBFR *fbfr, char *cstruct, char *view);
int Fvftos32 (FBFR32 *fbfr, char *cstruct, char *view);
参数说明:
fbfr:要拷贝的FML buffer指针;
cstruct:指向C结构数据的指针;
view:VIEW名称。
若FML中的域在结构中没有对应的项,则忽略。对于多记录的域,相应结构的域要是一个数组,如果buffer中的记录数小于结构中域数组的个数,则结构中多余部分置为null值。如果buffer记录数大于数组个数,则多余的值被忽略。
16.Fvstof(Fvstof32)
把VIEW结构中的数据拷贝到FML buffer中。
int Fvstof(FBFR *fbfr, char *cstruct, int mode, char *view);
int Fvstof32(FBFR32 *fbfr, char *cstruct, int mode, char *view);
参数说明:
fbfr:FML buffer地址;
struct:C结构数据地址;
mode:拷贝模式。有以下可选值:
- FJOIN:把结构和FML buffer匹配的域中结构的值拷贝到结果buffer中;
- FOJOIN:执行FJOIN功能之外,也把FML buffer中其他内容拷贝到结果buffer 中;
- FUPDATE:执行FJOIN功能之外,也把FML buffer和结构的其他内容拷贝到结果buffer中;
- FCONCAT:把结构和FML buffer的全部内容都拷贝到结果buffer中。
view:VIEW名称。
发表评论
-
喝茶的十八个层次,你属于哪一层?
2010-11-03 11:24 1210看到博友天马的这篇文章,当下就请求在本博转载。应该说此文概括了 ... -
[原创](多图)武夷岩茶传统制作工艺流程雕塑汇总
2010-09-24 10:55 1114我们武夷岩茶传统制作工艺,在武夷山茶博园雕塑汇总, 拍照后现 ... -
网络数据分析工作的五个职责
2010-06-27 11:02 9301、对于PPC竞价效果的数据分析 如:当日点击数,当 ... -
SEO技巧
2010-06-26 10:53 845“百度新鲜嗜好”:每三个月会让一些新的排名到前面,一些原来排名 ... -
《财富》杂志评选的75本必读的最睿智的图书
2010-06-13 10:04 2394商业兴衰 《1929 年大崩盘》(The Great ... -
心灵资本学
2010-06-03 11:53 1040心灵智能 16个层级 启蒙 世界灵魂 服务精神 开创 ... -
淘宝排名规划
2010-04-22 14:36 852宝贝收藏,宝贝浏览量,售出数量,店铺信誉,在架时间,宝贝名称关 ... -
设计中的色彩:热情的红色
2010-04-20 16:00 826今天是一个新的系列文 ... -
设计中的色彩:蓝色
2010-04-20 16:00 738上一篇,在这个关于在设计中使用色彩的系列文章的第一篇中,我们研 ... -
设计中的色彩:绿色
2010-04-20 15:59 799到现在为止,我们在这 ... -
设计中的色彩:橙色
2010-04-20 15:59 853接着上篇绿色 ,今天我们将看一下橙色以及它在网页设计和Log ... -
设计中的色彩:黄色
2010-04-20 15:58 962上篇我们讨论了温暖而鲜明的橙色 。今天我们将继续停留在色盘的 ... -
设计中的色彩:紫色
2010-04-20 15:57 1241上一篇我们看了一下快乐的黄色 ,现在轮到黄色的补色——紫色了 ... -
设计中的色彩:棕色
2010-04-20 15:56 765上一篇我们讨论了一下紫色 , 一个十分鲜明的色彩。今天,我 ... -
设计中的色彩:粉色
2010-04-20 15:56 943在上一篇,我们讨论了一下泥土的色彩——棕色 。这次让我们来看 ... -
设计中的色彩:灰色
2010-04-20 15:55 747在这个系列中,我们差不多了解了彩虹中的每一种颜色及其在设计中的 ... -
magento nginx
2010-04-15 14:34 1048user www www; worker_proce ... -
Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器
2010-04-14 21:56 1282转载:http://blog.s135.com/ngi ... -
Red Hat enterprise 5 gcc安装顺序
2010-04-14 11:37 4175包安装顺序,插入光盘,进入目录cd media/RHEL_5. ... -
TUXEDO配置参数详解 远程客户端配置
2009-08-07 01:16 3964http://blog.chinaunix.net/u3/99 ...
相关推荐
其中,**Field Manipulation Language (FML)** 和其变体 **FML32** 是两种重要的缓冲类型,用于存储多个命名字段,并通过 API 接口进行管理。本章节将详细介绍 FML 和 FML32 缓冲类型的特点、优势与劣势,以及如何在...
3. **版本兼容性**:确保控件版本与使用它的应用程序版本兼容,不同版本的OCX控件可能有不同的API或行为。 4. **错误处理**:在调用OCX控件的方法或属性时,应添加适当的错误处理代码,以处理可能出现的异常或返回值...
综上所述,这个JAVA FML31的OA系统可能包含了一个基于Java Card API的智能卡支持,用于增强系统的安全性或实现特定的身份验证机制。同时,由于提供了完整的源代码,用户可以根据自己的需求对系统进行深度定制,以...
《使用Forge API和FML开发Minecraft模组:深入探索Civilization模组》 在Minecraft的世界里,模组(Mod)是一种扩展游戏功能和内容的重要方式。Forge API和FML(Forge Mod Loader)是开发者们用来创建模组的常用...
要使用fml32,需要先定义fml32数据缓冲区的结构文件,包括各字段名称、长度等,并生成对应的C语言头文件。在实际的应用程序中,只需包含这个头文件,即可使用fml32数据缓冲区。 2. 示例:查询学生信息 假设我们要...
封装一套TUXEDO的FML API,会在之后维护更新,只需一个头文件,即可解决
2. **常用的fml(fml32)操作函数** - `falloc`: 分配一个FML(Field Management Language)缓冲区,用于处理结构化数据。参数包括字段数量和缓冲区长度。成功返回指向FML缓冲区的指针,失败返回NULL,错误号存储在...
* FML/FML32 field table support This module includes the mkfldpm32.pl script that is the perl equivalent of the tuxedo mkfldhdr32 program. It accepts a field table file as input and produces a *.pm ...
TUXEDO 提供了多种数据缓冲区类型,包括 STRING、CARRAY、VIEW、VIEW32、FML、FML32,并从TUXEDO 7.1版本开始增加了XML数据缓冲区。这些缓冲区类型各具特点,以适应不同的数据格式和需求。 STRING 类型的缓冲区类似...
通过Forge 1.14.4-28.1.0 MDK,开发者可以利用Gradle构建系统和Forge提供的API来创建自己的MOD。整个过程包括编写Java代码、配置MOD的metadata、打包和发布。Forge MOD的开发涉及到Java编程、资源管理、事件处理等多...
Forge本身是一个强大的模组开发框架,提供了一个统一的API,使得模组开发者可以安全地扩展游戏功能。而FML则是Forge的前置加载器,它的主要职责是在Forge启动之前进行模组的预处理,确保模组间的兼容性和正确的加载...
### Tuxedo编程API速查 #### 一、引言:了解Tuxedo编程 **BEA Tuxedo**是一款高性能、高可靠性的事务处理中间件,被广泛应用于银行、电信等关键业务系统中。其提供了多种编程接口,其中ATMI(Any Transaction ...
- 编写CoreMod代码:根据需求定位要修改的游戏代码,使用Forge和FML提供的API进行注入。 - 测试和调试:利用Forge的测试环境进行游戏内测试,调试代码,确保Mod正常运行且不引起游戏崩溃。 - 发布和更新:将完成...
首先,TUXEDO提供了多种缓冲区类型,包括STRING、CARRAY、VIEW、VIEW32、FML、FML32,从TUXEDO 7.1版本开始,还引入了XML数据缓冲区。对于COBOL用户,TUXEDO也提供了专门的缓冲区类型。此外,用户还可以自定义缓冲区...
2. **常用的FML(FML32)操作函数** FML32是一种用于数据交换的数据结构,以下是一些基本操作: - **Falloc**: 分配FML缓冲区。参数`FLDOCC`指定字段数量,`FLDLEN`指定缓冲区长度。成功返回指向FML缓冲区的指针...
Tuxedo 提供了一套强大的API和编程模型,包括ATMI(Application Transaction Monitor Interface)和FML(Format Message Language),以支持C和C++等语言的开发。 1. **ATMI(Application Transaction Monitor ...
2. 针对Forge和FML的API编写和测试代码,因为GMCP可能提供了便利的API接口和测试框架。 3. 快速集成到现有的开发工作流中,与其他Gradle项目无缝配合。 开源项目标签意味着GMCP-0.8.7.zip的内容是公开的,任何人都...
2. **常用的 FML(FML32)操作函数** - **Falloc**: 分配一个FML缓冲区。`Falloc`用于创建FML数据结构,用于存储结构化的数据,不能用于ATMI调用,如`tpcall`等,错误号保存在`Ferror`全局变量中。 - **Finit**: ...
3. **客户端API**:Tuxedo为客户端提供了多种API,如ATMI(Application Transaction Monitor Interface)和XTA(eXtended Transaction API),允许客户端程序与Tuxedo服务器进行交互,执行远程调用和事务操作。...
"FML缓冲区操作"进一步扩展了这个概念,FML(Field Marked Language)是Tuxedo中的数据表示格式,用于序列化和反序列化数据。FML缓冲区允许开发者以结构化的方式处理数据,便于在网络间传输和在内存中处理。 至于...