TUXEDO函数说明Word文档格式.docx
《TUXEDO函数说明Word文档格式.docx》由会员分享,可在线阅读,更多相关《TUXEDO函数说明Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
![TUXEDO函数说明Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/4/6c027c03-2d54-412e-a9b6-6c4b61f2446d/6c027c03-2d54-412e-a9b6-6c4b61f2446d1.gif)
5.3tpstrerrordetail9
1与缓冲区使用有关的ATMI
1.1tpalloc
char*tpalloc(char*type,char*subtype,longsize)
描述:
分配缓冲区
参数:
type:
缓冲区的类型
subtype:
缓冲区的子类型,只有VIEW有子类型,其他的缓冲区该参数要设为NULL
long:
缓冲区的大小
返回值:
成功返回一个指向所分配空间首地址的CHAR*形指针,失败返回NULL。
1.2tprealloc
char*tprealloc(char*ptr,longsize)
重新分配缓冲区
ptr:
指向原缓冲区首地址的指针
size:
新缓冲区的大小
成功返回一个指向新分配空间首地址的CHAR*形指针,失败返回NULL。
1.3tpfree
voidtpfree(char*bufptr)
释放由TPALLOC()或TPREALLOC()分配的缓冲区
bufptr:
指向要释放的缓冲区首地址的指针
无
注意:
用TPALLOC(),TPREALLOC()分配的内存只能有TPFREE()释放掉,不能用FREE()
1.4tptypes
longtptypes(char*ptr,char*type,char*subtype)
返回有ptr所指向的缓冲区的类型及子类型
ptr:
指向要进行类型识别的缓冲区首地址的指针
type:
类型名
subtype:
子类型名(只对VIEW类型有效)
0成功,-1失败,错误号保存在全局变量tperrno中。
2常用的FML(FML32)操作函数
2.1Falloc
FBFR*Falloc(FLDOCCF,FLDLENV)
描述:
分配一块FML缓冲区
参数:
FLDOCC:
该FML缓冲区的字段个数,
FLDLEN:
该FML缓冲区的长度
返回值:
成功返回一个指向该FML缓冲区首地址的指针,失败返回NULL,错误号保存在全局
变量Ferror中
该FML缓冲区不能用于TPCALL(),TPACALL(),TPRETURN()等中,在这些函数中用到
的FML缓冲区只能用TPALLOC()分配。
2.2Finit
intFinit(FBFR*fbfr,FLDLENbuflen)
初始化该FML缓冲区
fbfr:
一个指向该FML缓冲区首地址的指针
buflen:
失败为-1,错误号保存在全局变量Ferror中
2.3Fadd
intFadd(FBFR*fbfr,FLDIDfieldid,char*value,FLDLENlen)
往FML缓冲区fbfr中ID为fieldid的字段增加一个值value
fbfr:
指向该FML缓冲区首地址的指针
fieldid:
要增加的字段的ID
value:
要增加的值,如果时其他类型的要转化为char*
len:
该字段的长度,如果不时CARRARY类型的,可设为0
失败为-1,错误号保存在全局变量Ferror中
2.4Fchg
intFchg(FBFR*fbfr,FLDIDfieldid,intocc,char*value,FLDLENlen)
改变fbfr中ID为fieldid字段的值。
该字段的新值,如果时其他类型的要转化为char*
失败为-1,错误号保存在全局变量Ferror中
2.5Fget
intFget(FBFR*fbfr,FLDIDfieldid,intocc,char*value,FLDLEN*maxlen)
从fbfr缓冲区中取ID为fieldid字段的值到value中。
字段的ID
取出的值保存到该指针指向的地址中
maxlen:
可以COPY到缓冲区value中的字符串的长度,返回值为真正COPY到该缓冲区的字
符串的长度
2.5Fprint
Fprint(FBFR*fbfr)
按格式打印fbfr缓冲区的内容。
一般用于程序调试中。
2.6Ferror
Ferror:
和C语言中的errno类似,当调用FML(FML32)函数出错时,把错误号保存在全局变量Ferror中。
char*Fstrerror(interr)
返回错误号为err的错误描述
err:
Ferror的值
成功返回错误描述,失败返回NULL
3连接的建立与断开有关的ATMI
3.1tpchkauth
inttpchkauth()
检查该TUXEDOSERVER所采用的安全方式
TPNOAUTH:
不需要认证
TPSYSAUTH:
需要口令认证
TPAPPSUTH:
需要口令认证,并且还需要应用级的认证或授权.
-1:
调用失败,错误号保存在全局变量tperrno中。
3.2tpinit
inttpinit(TPINIT*tpinfo)
与TUXEDOSERVER建立连接
TPINFO
失败返回-1,错误号保存在全局变量tperrno中。
TPINIT结构体在atmi.h中的定义如下
structtpinfo_t{
charusrname[MAXTIDENT+2];
/*clientusername*/
charcltname[MAXTIDENT+2];
/*applicationclientname*/
charpasswd[MAXTIDENT+2];
/*applicationpassword*/
chargrpname[MAXTIDENT+2];
/*clientgroupname*/
longflags;
/*initializationflags*/
longdatalen;
/*lengthofappspecificdata*/
longdata;
/*placeholderforappdata*/
};
typedefstructtpinfo_tTPINIT;
说明:
username,cltname,passwd,grpname,data,datalen用于安全认证中
flags:
用于定义以何种方式通知该客户端一个UNSOLICTEDMESSAGE的到来.它的值可以为:
TPU-SIG
TPU-DIP
TPU-IGN
TPSA-FASTPATH
TPSA-PROTECTED
3.3tpterm
inttpterm()
断开与TUXEDOSERVER建立连接
4与请求TUXEDOSERVER有关的ATMI
4.1tpcall
inttpcall(char*svc,char*idata,longilen,char**odata,long*olen,longflags)
客户端同步调用服务端的名为svc的SERVICE,
*svc:
SERVICE的名称
char*idata:
输入缓冲区的地址,客户端传给服务端的参数放在该缓冲区内
longilen:
输入缓冲区的长度
char**odata输出缓冲区的地址,服务端传给客户端的结果放在该缓冲区内
long*olen:
输出缓冲区的长度
longflags:
调用标志,由以下几个:
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
inttpacall(char*svc,char*data,longlen,longflags)
客户端异步调用服务端的名为svc的SERVICE,不等服务端返回结果,程序可继续往
下走,在某个地方调用tpgetrply()取的服务端的返回
char*svc,char*data,longlen参数的含义与tpcall()中的一样
flags可设置为:
TPNOTRAN,TPNOREPLY,TPNOBLOCKTPNOTIME,TPSIGRSTRT.
TPNOTRAN,TPNOBLOCKTPNOTIME,TPSIGRSTRT的含义与与tpcall()中的一样
TPNOREPLY:
调用tpacall()的客户端不想接收SEVER端的应答。
如果设置了
服务端不会给该客户端发送应答。
失败返回-1,成功返回一个HANDLER,可作为tpgetrply的参数,用于取应答
4.3tpgetrply
inttpgetrply(int*cd,char**data,long*len,longflags)
取出服务端对tpacall()的应答。
cdtpacall()返回的HANDLER
char**data返回缓冲区的地址,服务端传给客户端的结果放在该缓冲区内
long*len:
返回缓冲区的长度
flags:
可以是:
TPNOBLOCK,TPNOTIME,TPSIGRSTRT,TPGETANY(不管cd的值,从服务
器的应答队列中取第一个可用的消息),TPNOCHANGE
失败返回-1,错误号保存在全局变量tperrno中。
4.4tpcancel
inttpcancel(inthandle)
如果当前的程序不处于事务模式中,取消对tpacall()的应答,如果处于事务模式
中,则不能取消对tpacall()的应答,该调用会失败.
tpacall()返回的HANDLER
4.5tpgprio
inttpgprio()
返回最近发送(tpcall(),tpacall())或接收(tpgetrply())的一个消息的优先级
1-100消息的优先级,值越高,优先级越高
struct{
inthdl;
/*handle*/
intpr;
/*priority*/
}pa[SIZE];
for(i=0;
i<
requests;
i++){
/*Determineserviceanddataforrequest*/
pa[i].hdl=tpacall(Svc,buf,len,flags);
/*Savepriorityusedtosendrequest*/
pa[i].pr=tpgprio();
}
/*Useqsort(3)routinetosorthandlesinpriorityorder*/
qsort((char*)pa,requests,sizeof(pa[0]),cmpfcn);
requests;
tpgetrply(&
pa[i].hdl,&
rbufp,&
rlen,rflags);
4.6tpsprio
inttpsprio(intprio,longflags)
设置下一个要发送的消息的优先级
0-prio为相对值,设置下一个要发送的消息的优先级为现在的优先级加上prio
TPABSOLUTE:
prio为绝对值,设置下一个要发送的消息的优先级为prio
5与请求错误处理有关的ATMI
5.1tpstrerror
char*tpstrerror(inttperrno)
返回错误号为tperrno的错误描述
tperrno:
在atmi.h中定义的全局变量,用于标识错误号,类似于C中的errno
失败返回NULL,成功返回错误号为tperrno的错误描述.
5.2tperrordetail
inttperrordetail(longflags)
返回当前进程或线程最近调用ATMI的出错的更详细的描述
设为0
如果没有错误返回0,有错误返回错误描述号
5.3tpstrerrordetail
char*tpstrerrordetail(interr,longflags)
返回错误描述号err的详细描述信息
err:
tperrordetail()的返回值,
设为0
失败返回NULL,成功返回详细描述信息