TUXEDO 函数 说明 (中文)

tcl调用tuxedo实现tpcall 1. 源码 #include #include #include #include #include #include #include #include #include #include extern "C" { int Tuxedotcl_Init(Tcl_Interp *Interp); } /********************************** 阅读详情

TUXEDO函数说明

-收集整理

 

1与缓冲区使用有关的ATMI 2

1.1tpalloc. 2

1.2tprealloc. 2

1.3tpfree. 2

1.4tptypes. 2

2常用的FML(FML32)操作函数... 3

2.1Falloc. 3

2.2Finit 3

2.3Fadd. 3

2.4Fchg. 3

2.5Fget 4

2.5Fprint 4

2.6Ferror 4

3连接的建立与断开有关的ATMI 5

3.1tpchkauth. 5

3.2tpinit 5

3.3tpterm.. 6

4与请求TUXEDO SERVER 有关的ATMI 6

4.1tpcall 6

4.2tpacall 7

4.3tpgetrply. 7

4.4tpcancel 7

4.5tpgprio. 8

4.6tpsprio. 8

5与请求错误处理有关的ATMI 8

5.1tpstrerror 8

5.2tperrordetail 9

5.3tpstrerrordetail 9

 


 

1与缓冲区使用有关的ATMI

1.1tpalloc

char * tpalloc(char *type, char *subtype, long size)

描述:分配缓冲区

参数:type:缓冲区的类型

    subtype:缓冲区的子类型,只有VIEW有子类型,其他的缓冲区该参数要设为NULL

    long:缓冲区的大小

返回值: 成功返回一个指向所分配空间首地址的CHAR *形指针,失败返回NULL。

1.2tprealloc

char * tprealloc(char *ptr, long size)

描述:重新分配缓冲区

参数:ptr:指向原缓冲区首地址的指针

    size:新缓冲区的大小

返回值: 成功返回一个指向新分配空间首地址的CHAR *形指针,失败返回NULL。

1.3tpfree

void tpfree(char *bufptr)

描述:释放由TPALLOC()或TPREALLOC()分配的缓冲区

参数:bufptr:指向要释放的缓冲区首地址的指针

返回值:无

注意: 用TPALLOC(),TPREALLOC()分配的内存只能有TPFREE()释放掉,不能用FREE()

1.4tptypes

long tptypes(char *ptr, char *type, char *subtype)

描述:返回有ptr所指向的缓冲区的类型及子类型

参数: ptr:指向要进行类型识别的缓冲区首地址的指针

type:类型名

subtype:子类型名(只对VIEW类型有效)

返回值:0成功,-1失败, 错误号保存在全局变量tperrno中。

 

2常用的FML(FML32)操作函数

2.1Falloc

FBFR*  Falloc (FLDOCC F, FLDLEN V)

描述: 分配一块FML缓冲区

参数:

    FLDOCC: 该FML缓冲区的字段个数,

    FLDLEN: 该FML缓冲区的长度

返回值:成功返回一个指向该FML缓冲区首地址的指针,失败返回NULL,错误号保存在全局

变量Ferror中

注意:   该FML缓冲区不能用于TPCALL(),TPACALL(),TPRETURN()等中,在这些函数中用到

FML缓冲区只能用TPALLOC()分配。

2.2Finit

int Finit(FBFR *fbfr, FLDLEN buflen)

描述: 初始化该FML缓冲区

参数:

   fbfr: 一个指向该FML缓冲区首地址的指针

   buflen: 该FML缓冲区的长度

返回值:失败为-1, 错误号保存在全局变量Ferror中

2.3Fadd

int Fadd(FBFR *fbfr, FLDID fieldid, char *value, FLDLEN len)

 

描述: 往FML缓冲区fbfr中ID为fieldid的字段增加一个值value

参数:

fbfr:    指向该FML缓冲区首地址的指针

fieldid: 要增加的字段的ID

value:   要增加的值,如果时其他类型的要转化为char *

len:     该字段的长度,如果不时CARRARY类型的,可设为0

返回值: 失败为-1, 错误号保存在全局变量Ferror中

2.4Fchg

int Fchg(FBFR *fbfr, FLDID fieldid,int occ, char *value, FLDLEN len)

描述:   改变fbfr中ID为fieldid字段的值。

参数:

fbfr:    指向该FML缓冲区首地址的指针

fieldid: 要增加的字段的ID

value:   该字段的新值,如果时其他类型的要转化为char *

len:     该字段的长度,如果不时CARRARY类型的,可设为0

返回值:失败为-1,错误号保存在全局变量Ferror中

2.5Fget

int Fget(FBFR *fbfr, FLDID fieldid,int occ, char *value, FLDLEN *maxlen)

描述:   从fbfr缓冲区中取ID为fieldid字段的值到value中。

参数:

fbfr:    指向该FML缓冲区首地址的指针

fieldid: 字段的ID

value:   取出的值保存到该指针指向的地址中

maxlen:  可以COPY到缓冲区value中的字符串的长度,返回值为真正COPY到该缓冲区的字

符串的长度

返回值:失败为-1, 错误号保存在全局变量Ferror中

2.5Fprint

Fprint(FBFR *fbfr)

描述: 按格式打印fbfr缓冲区的内容。一般用于程序调试中。

参数:

fbfr:    指向该FML缓冲区首地址的指针

返回值:失败为-1, 错误号保存在全局变量Ferror中

2.6Ferror

Ferror

C语言中的errno类似,当调用FML(FML32)函数出错时,把错误号保存在全局变量Ferror中。

char *  Fstrerror(int err)

描述:返回错误号为err错误描述

参数:err: Ferror的值

返回值:成功返回错误描述,失败返回NULL

 

 

3连接的建立与断开有关的ATMI

3.1tpchkauth

int tpchkauth()

描述: 检查该TUXEDO SERVER所采用的安全方式

参数:无

返回值:

      TPNOAUTH:不需要认证

      TPSYSAUTH:需要口令认证

      TPAPPSUTH:需要口令认证,并且还需要应用级的认证或授权.

      -1:调用失败, 错误号保存在全局变量tperrno中。

3.2tpinit

int tpinit(TPINIT *tpinfo)

描述: 与TUXEDO SERVER建立连接

参数:TPINFO

返回值: 失败返回-1, 错误号保存在全局变量tperrno中。

 

TPINIT结构体在atmi.h中的定义如下

struct  tpinfo_t {

    char    usrname[MAXTIDENT+2];   /* client user name */

    char        cltname[MAXTIDENT+2];   /* application client name */

    char    passwd[MAXTIDENT+2];    /* application password */

    char    grpname[MAXTIDENT+2];   /* client group name */

    long    flags;          /* initialization flags */

    long    datalen;        /* length of app specific data */

    long    data;           /* placeholder for app data */

};

typedef struct  tpinfo_t TPINIT;

说明:username,cltname,passwd,grpname,data,datalen用于安全认证中

flags:用于定义以何种方式通知该客户端一个UNSOLICTED MESSAGE的到来.它的值可以为:

TPU-SIG

TPU-DIP

TPU-IGN

TPSA-FASTPATH

TPSA-PROTECTED

3.3tpterm

int tpterm()

描述: 断开与TUXEDO SERVER建立连接

参数:无

返回值: 失败返回-1, 错误号保存在全局变量tperrno中。

 

4与请求TUXEDO SERVER 有关的ATMI

4.1tpcall

int tpcall(char *svc, char *idata, long ilen, char **odata, long   *olen, long flags)

描述:客户端同步调用服务端的名为svc的SERVICE,

参数:

*svc:SERVICE的名称

char *idata: 输入缓冲区的地址,客户端传给服务端的参数放在该缓冲区内

long ilen:   输入缓冲区的长度

char **odata  输出缓冲区的地址,服务端传给客户端的结果放在该缓冲区内

long   *olen:输出缓冲区的长度  

long flags:  调用标志,由以下几个:

TPNOTRAN

如果调用svc的客户端当前在TRANSACTION方式下,那么svc不参与当前的TRANSACTION。

 

TPNOCHANGE

如果服务端返回的缓冲区类型与客户端定义的缓冲区(odata)类型不一致,默认情况下,odata会转换成与服务端返回的缓冲区类型一致的类型,如果设置了该FLAG,那么当出现这种情况时,不进行缓冲区类型转换,并且会保错。

 

TPNOBLOCK

默认情况下,如果客户端有阻塞条件存在(如CLIENT的TCP/IP中的缓冲区满,磁盘I/O忙等),那么客户端会阻塞在那里,直到阻塞消除或超时出错。如果设置了TPNOBLOCK,当客户端有阻塞条件存在时,TPCALL()会立刻返回并报错. 注意TPNOBLOCK只对发送请求时起作用,如果在接收服务端返回的结果时有阻塞条件存在,客户端会在那里等待,直到阻塞消除或超时出错

 

TPNOTIME

如果客户端有阻塞条件存在,客户端会一直阻塞在那里,即使到了超时时间也不返回,但如果该客户端是在TRANSACTION模式下,当到了

事务的超时时间,还是会报超时错误并返回。

 

TPSIGRSTRT

如果在进行系统调用时,被信号中断,该系统调用会重新进行。

 

调用成功返回0,失败返回-1, 错误号保存在全局变量tperrno中。

 

4.2tpacall

int tpacall(char *svc, char *data, long len, long flags)

描述:  客户端异步调用服务端的名为svc的SERVICE,不等服务端返回结果,程序可继续往

下走,在某个地方调用tpgetrply()取的服务端的返回

参数:

char *svc, char *data, long len参数的含义与tpcall()中的一样

flags 可设置为:TPNOTRAN, TPNOREPLY, TPNOBLOCKTPNOTIME, TPSIGRSTRT.

TPNOTRAN, TPNOBLOCKTPNOTIME, TPSIGRSTRT的含义与tpcall()中的一样

TPNOREPLY:调用tpacall()的客户端不想接收SEVER端的应答。如果设置了

TPNOREPLY:服务端不会给该客户端发送应答。

返回值: 失败返回-1,成功返回一个HANDLER,可作为tpgetrply的参数,用于取应答

4.3tpgetrply

int tpgetrply(int *cd, char **data, long *len, long flags)

描述:取出服务端对tpacall()的应答。

参数: cd tpacall()返回的HANDLER

char **data返回缓冲区的地址,服务端传给客户端的结果放在该缓冲区内

long   *len:返回缓冲区的长度

flags:可以是:TPNOBLOCK, TPNOTIME,TPSIGRSTRT,TPGETANY(不管cd的值,从服务

器的应答队列中取第一个可用的消息),TPNOCHANGE

返回值: 失败返回-1,错误号保存在全局变量tperrno中。

 

4.4tpcancel

int tpcancel(int handle)

描述: 如果当前的程序不处于事务模式中,取消对tpacall()的应答, 如果处于事务模式

,则不能取消对tpacall()的应答,该调用会失败.

参数: tpacall()返回的HANDLER

返回值: 失败返回-1,错误号保存在全局变量tperrno中。

4.5tpgprio

int tpgprio()

描述:返回最近发送(tpcall(),tpacall())或接收(tpgetrply())的一个消息的优先级

参数:无

返回值: 1-100消息的优先级,值越高, 优先级越高

        失败返回-1, 错误号保存在全局变量tperrno中。

 

struct {

int hdl; /* handle*/

int pr; /* priority*/

} pa[SIZE];

for (i=0; i<requests; i++) {

/* Determine service and data for request */

pa [i].hdl = tpacall(Svc, buf, len, flags);

/* Save priority used to send request */

pa[i].pr = tpgprio();

}

/* Use qsort(3) routine to sort handles in priority order */

qsort((char*) pa, requests, sizeof(pa[0]), cmpfcn);

for (i=0; i< requests; i++) {

tpgetrply(&pa[i].hdl, &rbufp, &rlen, rflags);

}

 

4.6tpsprio

int tpsprio (int prio, long flags)

描述: 设置下一个要发送的消息的优先级

参数: 0- prio为相对值, 设置下一个要发送的消息的优先级为现在的优先级加上prio

     TPABSOLUTE: prio为绝对值, 设置下一个要发送的消息的优先级为prio

返回值: 失败返回-1,错误号保存在全局变量tperrno中。

 

 

5与请求错误处理有关的ATMI

5.1tpstrerror

char *tpstrerror(int tperrno)

描述:返回错误号为tperrno的错误描述

参数: tperrno:在atmi.h中定义的全局变量,用于标识错误号,类似于C中的errno

返回值: 失败返回NULL,成功返回错误号为tperrno的错误描述.

5.2tperrordetail

int tperrordetail(long flags)

描述: 返回当前进程或线程最近调用ATMI的出错的更详细的描述

参数:设为0

返回值: 如果没有错误返回0,有错误返回错误描述号

 

5.3tpstrerrordetail

char * tpstrerrordetail(int err, long flags)

描述: 返回错误描述号err详细描述信息

参数:

err : tperrordetail()的返回值,

flags: 设为0

返回值: 失败返回NULL,成功返回 详细描述信息
利用自定义堆栈进行 Shellcode 开发 最近学习了下 BRC4 作者1月发表的博客 Hiding In PlainSight - Indirect Syscall is Dead! 阅读详情

相关推荐

KingbaseES实战指南:Oracle兼容功能在企业级迁移中的高效应用

本文详细解析KingbaseES与Oracle的兼容功能在企业级数据库迁移中的高效应用,包括数据类型映射、存储过程兼容性、迁移评估、性能调优及高可用架构设计等实战技巧,助力企业实现平滑迁移与性能优化。

weixin_30555125的博客 515

将 FML 用于 WebLogic Tuxedo Connector

转自bea.com  将 FML 用于 WebLogic Tuxedo Connector 以下部分讨论字段控制语言(Field Manipulation Language,简称 FML)并描述 WebLogic Tuxedo Connector 如何使用 FML。  FML 概述 注意:

jbboxcn的专栏 6689

Spring Boot集成Quartz:使用Flyway自动化数据库表初始化实战

在Java企业级应用开发中,任务调度是支撑后台作业、定时处理的核心组件。Quartz作为业界广泛采用的调度框架,其持久化机制依赖数据库存储任务状态,确保集群环境下的高可用性。通过JDBC JobStore,Quartz将调度器、触发器与任务详情映射为结构化数据表,实现了任务状态的可靠存储与恢复。为提升部署效率与维护一致性,数据库迁移工具如Flyway应运而生,它通过版本化SQL脚本管理数据库结构变更,使表结构创建与升级过程可追溯、可重复。本文聚焦于Spring Boot项目中,如何整合Flyway与Quar

weixin_34130389的博客 355

FML32 API

FML32 API 索引: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.

sxtobj的专栏 6441

TUXEDO教程

第一章 开发BEA Tuxedo应用程序 §1.1 开发前的思考 在开发BEA Tuxedo应用程序之前,你需要先搞清楚一系列和设计开发相关的概念,如识别什么是客户机,有哪些方法可以从外界收集数据并提交服务器进行业务处理;识别什么是服务器,哪些程序包容了可以处理客户机输入的商业逻辑;识别什么是类型缓冲区,客户程序在向其这程序发送数据前如何分配内存区域;什么是BEA Tuxedo的消息范

lionzl的专栏 2906

JDBC笔记

MySQL常用命令: SHOW DATABASES; //查看数据库 CREATE DATABASE yuan; //创建库 USE yuan; //在建表之前要先选中数据库 SHOW TABLES; //创建表格 CREATE TABLE student ( id INT(20) COMMENT ‘学号’, studentname VARCHAR(20) COMMENT ‘姓名’, score FLOAT DEFAULT 0 COMMENT ‘成绩’ ) CREATE TABLE

weixin_44919936的博客 495

Access与SQL融合:跨平台数据库操作与性能优化指南

数据库技术从传统的关系型数据库如Access到现代SQL工具的演进,体现了数据处理需求的不断升级。通过ODBC驱动和JDBC桥接技术,Access数据库能够与现代SQL工具如DBeaver无缝集成,实现跨平台操作。这种技术融合不仅提升了数据查询和操作的效率,还扩展了应用场景,如复杂查询、批量操作和数据结构迁移。特别是在性能优化方面,通过参数化查询、索引优化和批量处理,可以显著提升数据处理速度。本文以Access与DBeaver的集成为例,展示了如何在实际项目中应用这些技术,解决常见的连接问题和性能瓶颈,为开

weixin_42116058的博客 330

Spring Boot整合Quartz实现数据库表自动生成与集群配置详解

任务调度是分布式系统中的核心组件,用于在预定时间或条件下自动执行特定操作。其原理是通过调度器管理任务和触发器,将执行状态持久化到数据库以确保可靠性和可恢复性。这项技术的价值在于提升系统自动化水平,支持复杂业务逻辑的定时处理。在微服务架构和云原生场景中,任务调度广泛应用于数据同步、报表生成、缓存清理等环节。本文聚焦于Spring Boot集成Quartz时的数据库表自动生成方案,通过配置spring.quartz.jdbc.initialize-schema参数,结合spring-boot-starter-q

weixin_30675247的博客 360

SQL MINUS 实战指南:集合差集原理、NULL处理与跨数据库替代方案

SQL MINUS 并非数值减法,而是基于集合论的差集运算,其核心在于去重、NULL敏感比较与隐式排序。理解 MINUS 的执行原理,有助于规避金融、风控等强一致性场景中因隐式去重、NULL静默过滤或类型不匹配导致的数据核对偏差。它在 Oracle 中原生支持,而 PostgreSQL 和新版 MySQL 使用语义一致的 EXCEPT,MySQL 旧版本则需 LEFT JOIN 或 NOT EXISTS 等 ANSI 兼容方案实现等价逻辑。掌握 MINUS 的性能边界(如大表哈希匹配成本、LOB字段限制)及

ainixi7099的博客 359

深度解析Eclipse OpenVSX:构建私有VS Code扩展市场的完整指南

在当今的开发环境中,Visual Studio Code已经成为最受欢迎的代码编辑器之一,而扩展生态系统是其成功的关键因素。Eclipse OpenVSX作为一个开源的VS Code扩展市场解决方案,为开发者和企业提供了搭建私有扩展市场的完整工具链。本文将深入探讨如何快速部署和定制化OpenVSX,打造专属的扩展管理平台。 ## 为什么选择OpenVSX?开源扩展市场的核心价值 Eclipse

gitblog_00850的博客 454

DBeaver实战指南:开源数据库工具的安装配置与信创适配

DBeaver是一款开源、跨平台、可扩展的通用数据库管理工具,其核心价值在于提供统一操作界面与深度数据库协议支持。它基于Eclipse RCP架构,通过JDBC/ODBC驱动实现对MySQL、Oracle、PostgreSQL及国产数据库(如openGauss、达梦、人大金仓)的原生兼容,技术原理涵盖驱动动态加载、SSH隧道代理、虚拟数据库联邦查询等工程机制。相比Navicat等商业工具,DBeaver以可控性、可审计性与供应链安全见长,广泛应用于金融信创迁移、政务云多源治理和K8s环境下的轻量运维场景。本

alince20008的博客 484

C++与MySQL数据库交互实战:从连接池到JSON查询的工程化封装

数据库连接管理是后台服务开发的核心基础,其核心原理在于通过连接池复用TCP连接,避免频繁创建销毁带来的性能开销。这项技术能显著提升系统吞吐量,降低延迟,对于高并发在线服务至关重要。在实际工程中,开发者需要关注连接的生命周期管理、资源泄漏防护以及查询性能优化。特别是在C++这类系统级语言中,结合MySQL进行数据操作时,需妥善处理内存管理、并发安全与SQL注入防护。通过封装健壮的连接池与执行器组件,并利用预编译语句和RAII(资源获取即初始化)机制,可以构建出安全高效的数据访问层。本文聚焦于C++与MySQL

421

Oracle数据库JSON数据处理全解析:从存储、查询到性能优化

在数据库领域,处理半结构化数据是应对现代业务灵活性的关键需求。JSON作为一种轻量级的数据交换格式,因其灵活性和易读性,成为存储动态、模式多变数据的理想选择。其核心原理在于通过键值对和嵌套结构,在保持数据自描述性的同时,支持高效序列化与反序列化。这项技术的价值在于,它允许关系型数据库在维持强事务一致性的优势下,无缝融入文档模型的灵活性,从而扩展了其应用边界。典型的应用场景包括电商订单中的动态商品快照、物联网设备的可变指标上报、以及用户配置信息存储等,这些场景的共同点是数据结构难以用固定的表模式预先定义。Or

weixin_33724659的博客 356

工作中使用到的单词(软件开发)_第五版

本文摘要: 本文为软件开发相关的术语与技术要点整理,主要包含2020-2025年间四版内容更新(No.01-41)。重点包括: 证书文件格式(PEM/P12)差异 外部API通信注意事项(Accept头设置、HTTPS连接问题) Postman工具使用技巧(Cookie管理、请求头设置) WAS配置相关经验(JVM设置、SSL连接问题) 数据库操作命令(DB2表结构修改) IBM安全管理组件(TAM/iv-user机制) 网络通信细节(chunked传输编码特性) 常用开发工具(curl、Postman)的

sun0322 2364

CLM数模分离工具blobswing:Swing+SQLite轻量实现

CLM(计算机辅助放样模型)是航空、船舶等高端制造领域特有的数模格式,其核心挑战在于几何形态与工艺语义的深度耦合。传统CAD软件无法解析嵌入式blob中的制造指令,导致工艺数据丢失。基于数模分离理念,需将几何层与过程层解耦为可独立管理的结构化实体。SQLite提供高效元数据索引与离线事务能力,Swing保障老旧工控机(4GB内存/JDK1.8.0_25)下的低内存占用与稳定渲染。该方案适用于国产工业终端环境,支撑CLM文件的解析、分离、编辑与安全回写,已在主机厂产线验证落地。

weixin_30631587的博客 515

Sqoop大数据传输工具:原理、优化与实战

数据迁移是大数据处理中的基础环节,传统ETL工具在处理海量数据时面临性能瓶颈。Apache Sqoop作为Hadoop生态中的专用数据传输工具,通过MapReduce并行计算模型实现高效批量传输,支持全量与增量同步,自动完成关系型数据库与Hadoop系统间的数据格式转换。其核心价值在于解决企业级数据仓库初始化、周期性数据同步等场景下的效率问题。通过合理配置并行度、选择压缩存储格式等优化手段,可进一步提升传输性能。结合Hive、Oozie等生态组件,Sqoop能构建完整的数据管道,满足数据仓库、数据分析等大数

weixin_30764883的博客 398

MuleSoft+AI编排:企业级大模型集成落地实践

AI编排(AI Orchestration)是将大语言模型能力安全、可控、可审计地嵌入现有ERP、CRM、BI等企业系统的工程方法,其核心在于解耦数据接入、语义理解与治理控制三层职责。不同于单点工具方案,它强调MuleSoft等集成平台负责连接、路由、脱敏与审计,LangChain等AI框架专注意图解析、工具调度与生成,形成双引擎协同架构。该模式显著提升AI在销售风险预警、客户服务提效、财务流程自动化等场景的上线成功率与合规性,尤其适用于有SAP、Salesforce、Oracle等多源异构系统及强监管要求

caodaoxi的专栏 462

JavaWeb知识点

1.Maven中的仓库用来存储什么的?Maven的仓库是用来存储和管理jar包的2.Maven中有哪几类仓库?查找依赖(jar)的顺序是什么样的?本地仓库(1)远程仓库(2)中央仓库(3)

ql200106的博客 268
上一篇: 台湾地区 居民身份识别证件编码规则
下一篇: S D K 学 习 笔 记1 sdk基础
SuperSuperLéon
博客等级 码龄25年 22粉丝 38原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值