Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1791510
  • 博文数量: 600
  • 博客积分: 10581
  • 博客等级: 上将
  • 技术积分: 6205
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 10:13
文章分类
文章存档

2016年(2)

2015年(9)

2014年(8)

2013年(5)

2012年(8)

2011年(36)

2010年(34)

2009年(451)

2008年(47)

分类:

2009-08-22 13:20:18

 

【函数原型】:

void tpreturn( int rval, int rcode, char *data, long len, long flags );

【功能说明】:

tpreturn函数标志服务处理结束,并将返回信息发送给请求者。

【参数说明】:

rval   TPSUCCESS  服务处理成功;

             TPFAIL           服务处理失败;

rcode       通过该参数返回调用者一个应用自定义的值,客户端可以查询全局变量tpurcode访问rcode值;

data  返回包数据指针;

len    返回包长度;

flags 未使用,置为0

【返回值】:

【使用例】:

tpreturn( TPSUCCESS, 0, rqst->data, 0L, 0 );

 

 

Tuxedo提供了九种通讯缓冲区类型,常用的有:

l        STRING

l        CARRAY

l        VIEW / VIEW32

l        FML / FML32

 

STRING类型用于数据是字符数组,且以空字符结束。

 

【使用方法】:

C语言的字符串处理方式进行处理。

【使用例】:

客户端:

if ( ( sendbuf = tpalloc( "STRING", NULL, sendlen ) ) == NULL ) {

      fprintf( stderr, "Error allocating send buffer\n" );

      tpterm( );

      exit( 1 );

}

strcpy( sendbuf, s_buf );

服务器端:

int SVCNAME( rqst )

TPSVCINFO *rqst;

{

     

      strcpy( s_buf, rqst->data );

     

}

 

CARRAY类型用于处理二进制数据,其中可以包含空字符,因此在使用该类型进行传输时必须指定长度。

 

【使用方法】:

用二进制数据处理方式进行处理。

【使用例】:

客户端:

if ( ( sendbuf = tpalloc( "CARRAY", NULL, sendlen ) ) = NULL ) {

      fprintf( stderr, "Error allocating send buffer\n" );

      tpterm( );

      exit( 1 );

}

memcpy( sendbuf, s_buf, s_len );

 

服务器端:

int SVCNAME( rqst )

TPSVCINFO *rqst;

{

     

      memcpy( s_buf, rqst->data, rqst->len );

     

}

 

VIEW类型是应用程序定义的C结构,必须有一个VIEW描述文件来说明该结构。VIEW类型必须有子类型,用来说明每个结构成员的类型。

VIEW32类型与VIEW相似,只是允许更大的字符域、更多的域,以及更全面的类型。

 

使用VIEW/VIEW32类型需指定以下环境变量:

l      VIEWDIR / VIEWDIR32
VIEW
结构定义文件的存放路径,用逗号隔开;

l      VIEWFILES / VIEWFILES32
使用的VIEW结构定义文件名,用逗号隔开。

一般在本应用的setenv文件中指定以上环境变量的设置。

 

【使用例】:

$ cat aud.v         /* VUEW描述文件 */

$ /* View data structure */

VIEW aud

#type    cname    fbname  count     flag        size        null

long      b_id       -             1            -             -             0

float      balance  -             1            -             -             0.0

string    ermsg     -             1            -             80          ""

END

 

$cat setenv

      APPDIR=/users/test/simpdir;export APPDIR

      TUXCONFIG=/users/test/simpdir/tuxconfig;export TUXCONFIG

      VIEWDIR=/users/test/simpdir;export VIEWDIR

      VIEWFILES=aud.V;export VIEWFILES

 

$ . setenv            // 使setenv文件中设置的环境变量生效

 

$CCFLAGS=/usr/informix/incl/esql;export CCFLAGS

// 如果系统中既安装了informix,又安装了tuxedo,两者的include目录中均会包含decimal.h等文件,一般将tuxedo用户下的decimal.h删除或易名。因此在使用viewc命令时需指定包含decimal头文件的路径。

$viewc –n aud.v

生成aud.Vaud.h

 

$ cat aud.h

struct aud {

      long       b_id;

      float       balance;

      char              ermsg[80];

}

 

客户端:

struct aud *s_buf;

 

s_buf = ( struct aud* )tpalloc( "VIEW", "aud", sizeof( struct aud ) );

s_buf->b_id = …;

s_buf->balance = …;

strcpy( s_buf->ermsg, … );

tpcall( "SVCNAME", s_buf, … );

 

服务器端:

struct aud *rcv_buf, *ret_buf;

 

rcv_buf = ( struct aud * ) rqst->data;

 

ret_buf = ( struct aud * )tpalloc( "VIEW", "aud", sizeof( struct aud ) );

ret_buf->b_id = …;

ret_buf->balance = …;

strcpy( s_buf->ermsg, … );

tpreturn( TPSUCCESS, 0, ( char* )ret_buf, 0L, 0 );

 

 

FML类型是Tuxedo自定义的类型,它的每个数据域均有自己的标志符、发生频次和长度指示器。

 

2.4.1.1                Fadd

【函数原型】:

int Fadd( FBFR *fbfr, FLDID fieldid, char *value, FLDLEN len );

【功能说明】:

给数据域缓冲区增加新的域值。

【参数说明】:

fbfr          数据域缓冲区指针

fieldid     域标识符

value        新值指针

len           CARRAY类型指定长度

【返回值】:

<0            失败返回

else          成功返回

 

2.4.1.2               Fchg

【函数原型】:

int Fchg( FBFR *fbfr, FLDID fieldid, FLDOCC oc, char *value, FLDLEN len );

【功能说明】:

修改数据域缓冲区中的域值。

【参数说明】:

fbfr          数据域缓冲区指针

fieldid     域标识符

oc            域的频次

value        新值指针

len           CARRAY类型指定长度

【返回值】:

<0            失败返回

else          成功返回

 

阅读(1240) | 评论(0) | 转发(0) |
0

上一篇:tuxedo学习例子1

下一篇:tuxedo学习例子3

给主人留下些什么吧!~~