TUXEDO函数说明ATMI(应用程序事务监控接口)1与缓冲区使用有关的ATMI1.1tpallocchar*tpalloc(char*type,char*subtype,longsize)描述:分配缓冲区参数:type:缓冲区的类型subtype:缓冲区的子类型,只有VIEW有子类型,其他的缓冲区该参数要设为NULLlong:缓冲区的大小返回值:成功返回一个指向所分配空间首地址的CHAR*形指针,失败返回NULL。1.2tpreallocchar*tprealloc(char*ptr,longsize)描述:重新分配缓冲区参数:ptr:指向原缓冲区首地址的指针size:新缓冲区的大小返回值:成功返回一个指向新分配空间首地址的CHAR*形指针,失败返回NULL。1.3tpfreevoidtpfree(char*bufptr)描述:释放由TPALLOC()或TPREALLOC()分配的缓冲区参数:bufptr:指向要释放的缓冲区首地址的指针返回值:无注意:用TPALLOC(),TPREALLOC()分配的内存只能有TPFREE()释放掉,不能用FREE()1.4tptypeslongtptypes(char*ptr,char*type,char*subtype)描述:返回有ptr所指向的缓冲区的类型及子类型参数:ptr:指向要进行类型识别的缓冲区首地址的指针type:类型名ubtype:子类型名(只对VIEW类型有效)返回值:0成功,-1失败,错误号保存在全局变量tperrno中。2常用的FML(FML32)操作函数2.1FallocFBFR*Falloc(FLDOCCF,FLDLENV)描述:分配一块FML缓冲区参数:FLDOCC:该FML缓冲区的字段个数,FLDLEN:该FML缓冲区的长度返回值:成功返回一个指向该FML缓冲区首地址的指针,失败返回NULL,错误号保存在全局变量Ferror中。注意:该FML缓冲区不能用于TPCALL(),TPACALL(),TPRETURN()等中,在这些函数中用到的FML缓冲区只能用TPALLOC()分配。2.2FinitintFinit(FBFR*fbfr,FLDLENbuflen)描述:初始化该FML缓冲区参数:fbfr:一个指向该FML缓冲区首地址的指针buflen:该FML缓冲区的长度返回值:失败为-1,错误号保存在全局变量Ferror中2.3FaddintFadd(FBFR*fbfr,FLDIDfieldid,char*value,FLDLENlen)描述:往FML缓冲区fbfr中ID为fieldid的字段增加一个值value参数:fbfr:指向该FML缓冲区首地址的指针fieldid:要增加的字段的IDvalue:要增加的值,如果时其他类型的要转化为char*len:该字段的长度,如果不是CARRARY类型的,可设为0返回值:失败为-1,错误号保存在全局变量Ferror中2.4FchgintFchg(FBFR*fbfr,FLDIDfieldid,intocc,char*value,FLDLENlen)描述:改变fbfr中ID为fieldid字段的值。参数:fbfr:指向该FML缓冲区首地址的指针fieldid:要增加的字段的IDvalue:该字段的新值,如果时其他类型的要转化为char*len:该字段的长度,如果不时CARRARY类型的,可设为0返回值:失败为-1,错误号保存在全局变量Ferror中2.5FgetintFget(FBFR*fbfr,FLDIDfieldid,intocc,char*value,FLDLEN*maxlen)描述:从fbfr缓冲区中取ID为fieldid字段的值到value中。参数:fbfr:指向该FML缓冲区首地址的指针fieldid:字段的IDvalue:取出的值保存到该指针指向的地址中maxlen:可以COPY到缓冲区value中的字符串的长度,返回值为真正COPY到该缓冲区的字符串的长度返回值:失败为-1,错误号保存在全局变量Ferror中2.6FprintFprint(FBFR*fbfr)描述:按格式打印fbfr缓冲区的内容。一般用于程序调试中。参数:fbfr:指向该FML缓冲区首地址的指针返回值:失败为-1,错误号保存在全局变量Ferror中2.7FerrorFerror:和C语言中的errno类似,当调用FML(FML32)函数出错时,把错误号保存在全局变量Ferror中。char*Fstrerror(interr)描述:返回错误号为err的错误描述参数:err:Ferror的值返回值:成功返回错误描述,失败返回NULL3连接的建立与断开有关的ATMI3.1tpchkauthinttpchkauth()描述:检查该TUXEDOSERVER所采用的安全方式参数:无返回值:TPNOAUTH:不需要认证TPSYSAUTH:需要口令认证TPAPPSUTH:需要口令认证,并且还需要应用级的认证或授权.-1:调用失败,错误号保存在全局变量tperrno中。3.2tpinitinttpinit(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-SIGTPU-DIPTPU-IGNTPSA-FASTPATHTPSA-PROTECTED3.3tpterminttpterm()描述:断开与TUXEDOSERVER建立连接参数:无返回值:失败返回-1,错误号保存在全局变量tperrno中。4与请求TUXEDOSERVER有关的ATMI4.1tpcallinttpcall(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.2tpacallinttpacall(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端的应答。如果设置了TPNOREPLY:服务端不会给该客户端发送应答。返回值:失败返回-1,成功返回一个HANDLER,可作为tpgetrply的参数,用于取应答4.3tpgetrplyinttpgetrply(int*cd,char**data,long*len,longflags)描述:取出服务端对tpacall()的应答。参数:cdtpacall()返回的HANDLERchar**data返回缓冲区的地址,服务端传给客户端的结果放在该缓冲区内long*len:返回缓冲区的长度flags:可以是:TPNOBLOCK,TPNOTIME,TPSIGRSTRT,TPGETANY(不管cd的值,从服务器的应答队列中取第一个可用的消息),TPNOCHANGE返回值:失败返回-1,错误号保存在全局变量tperrno中。4.4tpcancelinttpcancel(inthandle)描述:如果当前的程序不处于事务模式中,取消对tpacall()的应答,如果处于事务模式中,则不能取消对tpacall()的应答,该调用会失败.参数:tpacall()返回的HANDLER返回值:失败返回-1,错误号保存在全局变量tperrno中。4.5tpgpriointtpgprio()描述:返回最近发送(tpcall(),tpacall())或接收(tpgetrply())的一个消息的优先级参数:无返回值:1-100消息的优先级,值越高,优先级越高失败返回-1,错误号保存在全局变量tperrno中。struct{inthdl;/*handle*/intpr;/*priority*/}pa[SIZE];for(i=0;irequests;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);for(i=0;irequests;i++){tpgetrply(&pa[i].hdl,&rbufp,&rlen,rflags);}4.6tpspriointtpsprio(intprio,longflags)描述:设置下一个要发送的消息的优先级参数:0-