TUXEDO函數(shù)說(shuō)明
-收集整理
4與請(qǐng)求TUXEDO SERVER 有關(guān)的ATMI6
5與請(qǐng)求錯(cuò)誤處理有關(guān)的ATMI8
1與緩沖區(qū)使用有關(guān)的ATMI
1.1tpalloc
char * tpalloc(char *type, char *subtype, long size)
描述:分配緩沖區(qū)
參數(shù):type:緩沖區(qū)的類(lèi)型
??? subtype:緩沖區(qū)的子類(lèi)型,只有VIEW有子類(lèi)型,其他的緩沖區(qū)該參數(shù)要設(shè)為NULL
??? long:緩沖區(qū)的大小
返回值: 成功返回一個(gè)指向所分配空間首地址的CHAR *形指針,失敗返回NULL。
1.2tprealloc
char * tprealloc(char *ptr, long size)
描述:重新分配緩沖區(qū)
參數(shù):ptr:指向原緩沖區(qū)首地址的指針
??? size:新緩沖區(qū)的大小
返回值: 成功返回一個(gè)指向新分配空間首地址的CHAR *形指針,失敗返回NULL。
1.3tpfree
void tpfree(char *bufptr)
描述:釋放由TPALLOC()或TPREALLOC()分配的緩沖區(qū)
參數(shù):bufptr:指向要釋放的緩沖區(qū)首地址的指針
返回值:無(wú)
注意: 用TPALLOC(),TPREALLOC()分配的內(nèi)存只能有TPFREE()釋放掉,不能用FREE()
1.4tptypes
long tptypes(char *ptr, char *type, char *subtype)
描述:返回有ptr所指向的緩沖區(qū)的類(lèi)型及子類(lèi)型
參數(shù): ptr:指向要進(jìn)行類(lèi)型識(shí)別的緩沖區(qū)首地址的指針
type:類(lèi)型名
subtype:子類(lèi)型名(只對(duì)VIEW類(lèi)型有效)
返回值:0成功,-1失敗, 錯(cuò)誤號(hào)保存在全局變量tperrno中。
2常用的FML(FML32)操作函數(shù)
2.1Falloc
FBFR*? Falloc (FLDOCC F, FLDLEN V)
描述: 分配一塊FML緩沖區(qū)
參數(shù):
??? FLDOCC: 該FML緩沖區(qū)的字段個(gè)數(shù),
??? FLDLEN: 該FML緩沖區(qū)的長(zhǎng)度
返回值:成功返回一個(gè)指向該FML緩沖區(qū)首地址的指針,失敗返回NULL,錯(cuò)誤號(hào)保存在全局
變量Ferror中
注意:?? 該FML緩沖區(qū)不能用于TPCALL(),TPACALL(),TPRETURN()等中,在這些函數(shù)中用到
的FML緩沖區(qū)只能用TPALLOC()分配。
2.2Finit
int Finit(FBFR *fbfr, FLDLEN buflen)
描述: 初始化該FML緩沖區(qū)
參數(shù):
?? fbfr: 一個(gè)指向該FML緩沖區(qū)首地址的指針
?? buflen: 該FML緩沖區(qū)的長(zhǎng)度
返回值:失敗為-1, 錯(cuò)誤號(hào)保存在全局變量Ferror中
2.3Fadd
int Fadd(FBFR *fbfr, FLDID fieldid, char *value, FLDLEN len)
描述: 往FML緩沖區(qū)fbfr中ID為fieldid的字段增加一個(gè)值value
參數(shù):
fbfr:??? 指向該FML緩沖區(qū)首地址的指針
fieldid: 要增加的字段的ID
value:?? 要增加的值,如果時(shí)其他類(lèi)型的要轉(zhuǎn)化為char *
len:???? 該字段的長(zhǎng)度,如果不時(shí)CARRARY類(lèi)型的,可設(shè)為0
返回值: 失敗為-1, 錯(cuò)誤號(hào)保存在全局變量Ferror中
2.4Fchg
int Fchg(FBFR *fbfr, FLDID fieldid,int occ, char *value, FLDLEN len)
描述:?? 改變fbfr中ID為fieldid字段的值。
參數(shù):
fbfr:??? 指向該FML緩沖區(qū)首地址的指針
fieldid: 要增加的字段的ID
value:?? 該字段的新值,如果時(shí)其他類(lèi)型的要轉(zhuǎn)化為char *
len:???? 該字段的長(zhǎng)度,如果不時(shí)CARRARY類(lèi)型的,可設(shè)為0
返回值:失敗為-1,錯(cuò)誤號(hào)保存在全局變量Ferror中
2.5Fget
int Fget(FBFR *fbfr, FLDID fieldid,int occ, char *value, FLDLEN *maxlen)
描述:?? 從fbfr緩沖區(qū)中取ID為fieldid字段的值到value中。
參數(shù):
fbfr:??? 指向該FML緩沖區(qū)首地址的指針
fieldid: 字段的ID
value:?? 取出的值保存到該指針指向的地址中
maxlen:? 可以COPY到緩沖區(qū)value中的字符串的長(zhǎng)度,返回值為真正COPY到該緩沖區(qū)的字
符串的長(zhǎng)度
返回值:失敗為-1, 錯(cuò)誤號(hào)保存在全局變量Ferror中
2.5Fprint
Fprint(FBFR *fbfr)
描述: 按格式打印fbfr緩沖區(qū)的內(nèi)容。一般用于程序調(diào)試中。
參數(shù):
fbfr:??? 指向該FML緩沖區(qū)首地址的指針
返回值:失敗為-1, 錯(cuò)誤號(hào)保存在全局變量Ferror中
2.6Ferror
Ferror:
和C語(yǔ)言中的errno類(lèi)似,當(dāng)調(diào)用FML(FML32)函數(shù)出錯(cuò)時(shí),把錯(cuò)誤號(hào)保存在全局變量Ferror中。
char *? Fstrerror(int err)
描述:返回錯(cuò)誤號(hào)為err的錯(cuò)誤描述
參數(shù):err: Ferror的值
返回值:成功返回錯(cuò)誤描述,失敗返回NULL
3連接的建立與斷開(kāi)有關(guān)的ATMI
3.1tpchkauth
int tpchkauth()
描述: 檢查該TUXEDO SERVER所采用的安全方式
參數(shù):無(wú)
返回值:
????? TPNOAUTH:不需要認(rèn)證
????? TPSYSAUTH:需要口令認(rèn)證
????? TPAPPSUTH:需要口令認(rèn)證,并且還需要應(yīng)用級(jí)的認(rèn)證或授權(quán).
????? -1:調(diào)用失敗, 錯(cuò)誤號(hào)保存在全局變量tperrno中。
3.2tpinit
int tpinit(TPINIT *tpinfo)
描述: 與TUXEDO SERVER建立連接
參數(shù):TPINFO
返回值: 失敗返回-1, 錯(cuò)誤號(hào)保存在全局變量tperrno中。
TPINIT結(jié)構(gòu)體在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 */
};
typedefstruct? tpinfo_t TPINIT;
說(shuō)明:username,cltname,passwd,grpname,data,datalen用于安全認(rèn)證中
flags:用于定義以何種方式通知該客戶端一個(gè)UNSOLICTED MESSAGE的到來(lái).它的值可以為:
TPU-SIG
TPU-DIP
TPU-IGN
TPSA-FASTPATH
TPSA-PROTECTED
3.3tpterm
int tpterm()
描述: 斷開(kāi)與TUXEDO SERVER建立連接
參數(shù):無(wú)
返回值: 失敗返回-1, 錯(cuò)誤號(hào)保存在全局變量tperrno中。
4與請(qǐng)求TUXEDO SERVER 有關(guān)的ATMI
4.1tpcall
int tpcall(char *svc, char *idata, long ilen, char **odata, long?? *olen, long flags)
描述:客戶端同步調(diào)用服務(wù)端的名為svc的SERVICE,
參數(shù):
*svc:SERVICE的名稱
char *idata: 輸入緩沖區(qū)的地址,客戶端傳給服務(wù)端的參數(shù)放在該緩沖區(qū)內(nèi)
long ilen:?? 輸入緩沖區(qū)的長(zhǎng)度
char **odata? 輸出緩沖區(qū)的地址,服務(wù)端傳給客戶端的結(jié)果放在該緩沖區(qū)內(nèi)
long?? *olen:輸出緩沖區(qū)的長(zhǎng)度??
long flags:? 調(diào)用標(biāo)志,由以下幾個(gè):
TPNOTRAN
如果調(diào)用svc的客戶端當(dāng)前在TRANSACTION方式下,那么svc不參與當(dāng)前的TRANSACTION。
TPNOCHANGE
如果服務(wù)端返回的緩沖區(qū)類(lèi)型與客戶端定義的緩沖區(qū)(odata)類(lèi)型不一致,默認(rèn)情況下,odata會(huì)轉(zhuǎn)換成與服務(wù)端返回的緩沖區(qū)類(lèi)型一致的類(lèi)型,如果設(shè)置了該FLAG,那么當(dāng)出現(xiàn)這種情況時(shí),不進(jìn)行緩沖區(qū)類(lèi)型轉(zhuǎn)換,并且會(huì)保錯(cuò)。
TPNOBLOCK
默認(rèn)情況下,如果客戶端有阻塞條件存在(如CLIENT的TCP/IP中的緩沖區(qū)滿,磁盤(pán)I/O忙等),那么客戶端會(huì)阻塞在那里,直到阻塞消除或超時(shí)出錯(cuò)。如果設(shè)置了TPNOBLOCK,當(dāng)客戶端有阻塞條件存在時(shí),TPCALL()會(huì)立刻返回并報(bào)錯(cuò). 注意TPNOBLOCK只對(duì)發(fā)送請(qǐng)求時(shí)起作用,如果在接收服務(wù)端返回的結(jié)果時(shí)有阻塞條件存在,客戶端會(huì)在那里等待,直到阻塞消除或超時(shí)出錯(cuò)
TPNOTIME
如果客戶端有阻塞條件存在,客戶端會(huì)一直阻塞在那里,即使到了超時(shí)時(shí)間也不返回,但如果該客戶端是在TRANSACTION模式下,當(dāng)?shù)搅?o:p>
事務(wù)的超時(shí)時(shí)間,還是會(huì)報(bào)超時(shí)錯(cuò)誤并返回。
TPSIGRSTRT
如果在進(jìn)行系統(tǒng)調(diào)用時(shí),被信號(hào)中斷,該系統(tǒng)調(diào)用會(huì)重新進(jìn)行。
調(diào)用成功返回0,失敗返回-1, 錯(cuò)誤號(hào)保存在全局變量tperrno中。
4.2tpacall
int tpacall(char *svc, char *data, long len, long flags)
描述:? 客戶端異步調(diào)用服務(wù)端的名為svc的SERVICE,不等服務(wù)端返回結(jié)果,程序可繼續(xù)往
下走,在某個(gè)地方調(diào)用tpgetrply()取的服務(wù)端的返回
參數(shù):
char *svc, char *data, long len參數(shù)的含義與tpcall()中的一樣
flags 可設(shè)置為:TPNOTRAN, TPNOREPLY, TPNOBLOCKTPNOTIME, TPSIGRSTRT.
TPNOTRAN, TPNOBLOCKTPNOTIME, TPSIGRSTRT的含義與與tpcall()中的一樣
TPNOREPLY:調(diào)用tpacall()的客戶端不想接收SEVER端的應(yīng)答。如果設(shè)置了
TPNOREPLY:服務(wù)端不會(huì)給該客戶端發(fā)送應(yīng)答。
返回值: 失敗返回-1,成功返回一個(gè)HANDLER,可作為tpgetrply的參數(shù),用于取應(yīng)答
4.3tpgetrply
int tpgetrply(int *cd, char **data, long *len, long flags)
描述:取出服務(wù)端對(duì)tpacall()的應(yīng)答。
參數(shù): cd tpacall()返回的HANDLER
char **data返回緩沖區(qū)的地址,服務(wù)端傳給客戶端的結(jié)果放在該緩沖區(qū)內(nèi)
long?? *len:返回緩沖區(qū)的長(zhǎng)度
flags:可以是:TPNOBLOCK, TPNOTIME,TPSIGRSTRT,TPGETANY(不管cd的值,從服務(wù)
器的應(yīng)答隊(duì)列中取第一個(gè)可用的消息),TPNOCHANGE
返回值: 失敗返回-1,錯(cuò)誤號(hào)保存在全局變量tperrno中。
4.4tpcancel
int tpcancel(int handle)
描述: 如果當(dāng)前的程序不處于事務(wù)模式中,取消對(duì)tpacall()的應(yīng)答, 如果處于事務(wù)模式
中,則不能取消對(duì)tpacall()的應(yīng)答,該調(diào)用會(huì)失敗.
參數(shù): tpacall()返回的HANDLER
返回值: 失敗返回-1,錯(cuò)誤號(hào)保存在全局變量tperrno中。
4.5tpgprio
int tpgprio()
描述:返回最近發(fā)送(tpcall(),tpacall())或接收(tpgetrply())的一個(gè)消息的優(yōu)先級(jí)
參數(shù):無(wú)
返回值: 1-100消息的優(yōu)先級(jí),值越高, 優(yōu)先級(jí)越高
??????? 失敗返回-1, 錯(cuò)誤號(hào)保存在全局變量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)
描述: 設(shè)置下一個(gè)要發(fā)送的消息的優(yōu)先級(jí)
參數(shù): 0- prio為相對(duì)值, 設(shè)置下一個(gè)要發(fā)送的消息的優(yōu)先級(jí)為現(xiàn)在的優(yōu)先級(jí)加上prio
???? TPABSOLUTE: prio為絕對(duì)值, 設(shè)置下一個(gè)要發(fā)送的消息的優(yōu)先級(jí)為prio
返回值: 失敗返回-1,錯(cuò)誤號(hào)保存在全局變量tperrno中。
5與請(qǐng)求錯(cuò)誤處理有關(guān)的ATMI
5.1tpstrerror
char *tpstrerror(int tperrno)
描述:返回錯(cuò)誤號(hào)為tperrno的錯(cuò)誤描述
參數(shù): tperrno:在atmi.h中定義的全局變量,用于標(biāo)識(shí)錯(cuò)誤號(hào),類(lèi)似于C中的errno
返回值: 失敗返回NULL,成功返回錯(cuò)誤號(hào)為tperrno的錯(cuò)誤描述.
5.2tperrordetail
int tperrordetail(long flags)
描述: 返回當(dāng)前進(jìn)程或線程最近調(diào)用ATMI的出錯(cuò)的更詳細(xì)的描述
參數(shù):設(shè)為0
返回值: 如果沒(méi)有錯(cuò)誤返回0,有錯(cuò)誤返回錯(cuò)誤描述號(hào)
5.3tpstrerrordetail
char * tpstrerrordetail(int err, long flags)
描述: 返回錯(cuò)誤描述號(hào)err的詳細(xì)描述信息
參數(shù):
err : tperrordetail()的返回值,
flags: 設(shè)為0