1. TPSVCINFO结构体
void tpservice(TPSVCINFO *svcinfo);
只有一个参数,该参数是指向TPSVCINFO结构的指针(atmi.h)。该结构定义如下:
struct tpsvcinfo {
char name[32]; /*service名(最大15个字符)*/
long flags; /* client调用时指定的flags */
char *d ata; /* 接收的数据地址 */
long len; /* 数据长度 */
int cd; /* 会话方式下的连接描述符 */
long appkey; /* 应用认证的key */
CLIENTID cltid; /* client ID */
};
2.调试和出错处理
当调用ATMI出错时,返回值为-1,全程变量tperrno被设值,该变量提供系统定义的出错原因。函数tpstrerror()以此变量为参数,返回错误的字符说明信息。完整的错误号和文本错误信息存在于文件$TUXDIR/include/atmi.h。函数userlog()重定向输出文件为ULOG.mmddyy。使用方法同printf()。该函数每次输出都写硬盘,这样在系统失败时也能保留调试信息。
usrlog(“ATMI error logged %d %s”,tperrno,tpstrerror(tperrno));
3.TUXEDO基本的数据缓冲类型:
² STRING 以空值结尾的单域字符数据。
² CARRAY 有长度定义的单域二进制数据,不进行编、解码。
² VIEW 类C结构或COBOL记录的多域组织。
² FML 无固定结构的自定义缓冲。
4.数据缓冲管理
函数用法:
(char *)tpalloc((char *)type, (char *)subtype, long size)
(char *)tprealloc((char *)bufptr, long newsize)
void tpfree((char *)bufptr)
5.同步通讯和异步通讯
同步通讯 int tpcall((char *)servicename, (char *)bufptr, long length, (char **)bufptr, (long *)length, long flags)
函数tpcall()有6个参数。如下:
交易名
² 请求数据缓冲
² 请求数据缓冲的长度(仅缓冲类型为CARRY时需要)
² 返回数据缓冲的地址。缓冲大小可以根据收到数据而改变。
² 返回数据缓冲大小的地址
² 标志量
标志量可以是以下值:
² TPNOTRAN 如有交易不调用
² TPNOBLOCK 如有阻塞不等待
² TPNOTIME 愿意等待直到超时
² TPSIGRSTRT 系统中断信号在TUXEDO完成后再发布
出错返回-1,错误原因如下:
² TPEINVAL 参数错误
² TPETRAN 交易相关错误
² TPETIME 超时
ret = tpcall(“TOUPPER”,bufptr,len,&bufptr,&len,flags);
ATMI提供2个异步通讯函数
tpacall()和tpgetrply()
int tpacall((char *)service, (char *)bufptr, long len, long flags);
flag:TPNOBLOCK,TPSIGRSTRT,TPNOTIME,TPNOTRAN,TPNOCHANGE,TPGETANY
int tpgetrply((int *)handle, (char **)bufptr, (long *)len, long flags);
flag:TPNOBLOCK,TPSIGRSTRT,TPNOTIME,TPNOTRAN
tpacall()有4个参数
² 交易名
² 请求数据缓冲
² 请求数据缓冲的长度(仅缓冲类型为CARRY时需要)
² 标志量(同tpcall())
返回值是一个非负描述符(句柄),用于其后的tpgetrply()调用。如果tpacall()调用失败,句柄是-1,错误原因设置在tperrno,可能是以下值:
TPELIMIT 过多未处理的tpacall()
TPETIME 超时
tpacall()后总跟随一个tpgetrply(),有4个参数
² 变量地址,可以传入tpcall()所得句柄,或另设一个
² 返回数据缓冲的地址。缓冲大小可以根据收到数据而改变。
² 返回数据缓冲大小的地址
² 标志量
标志量的值可以是如下之一:
TPGETANY 取第一个返回值,设句柄
TPNOCHANGE 取发送请求的匹配的类型的信息
参见tpcall()中的值
返回值0表示成功,-1表示失败,错误原因可能如下:
² TPEINVAL 参数错误
² TPEOTYPE 返回数据缓冲类型错误
² TPETIME 超时