えいこの習いの屋、よろしくお願いします!

发布新日志

  • TUXEDO函数说明

    2008-03-26 10:40:53


    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,有错误返回错误描述号

     

我的栏目

我的存档

数据统计

  • 访问量: 1249
  • 日志数: 2
  • 建立时间: 2008-03-24
  • 更新时间: 2008-03-26

RSS订阅

Open Toolbar