VIEW32 使用

1、定义view文件(demo.view)

 

VIEW aud

$  /*VIEW structure for audit information*/

 

#type   cname   fbname  count  flag  size  null_value

long      b_id        -             1        -      -          0

float      balance  -             1       -      -          0.0

string    ermsg     -             1       -      80      ""

 

END

 

2、编译view文件

 

viewc32 -n demo.view

 

将生成两个文件:demo.h, demo.V

 

3、设置两个环境变量(可直接添加到tux.env中,使用view32的服务端与客户端都需要设置)

 

VIEWFILES32=demo.v;   export    VIEWFILES32

VIEWDIR32=/home/oracle/simpapp;   export    VIEWDIR32

 

4、服务端代码片段

 

#include<demo.h>

 

void TOUPPER(TPSVCINFO *rqst)

{

      int i;

      //定义view32结构体指针

      struct demo *ptr;

      //将客户端传输的rqst->data的数据强制转换成view32类型数据

      ptr=(struct demo*)rqst->data;

      //日志中输出得到的数据

      userlog("VIEW   %d - %f - %s/n",ptr->b_id,ptr->balance,ptr->name);

 

      //向view32结构体中写入数据

      ptr->b_id=321;

      ptr->balance=1984.14;

      for(i=0;i<strlen(ptr->name);i++)

      {

              ptr->name=[i]=toupper(ptr->name[i]);

      }

 

      //返回数据到客户端

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

 

}

 

 

5、客户端代码

 

#include<demo.h>

 

 

int main(int argc,char * argv[])

{

     //定义view32类型缓冲区

      struct   demo  *sendbuf;

      struct   demo  * rcvbuf;

 

     //省略

 

     //分配缓冲区

     if((sendbuf=(struct demo *)tpalloc("VIEW32","demo",sizeof(struct demo))) == NULL)

     {

            (void) fprintf(stderr,"Error allocating view buffer./n");

            tpfree((char *)sendbuf);

            tpterm();

            exit(1);

     }

 

     if((rcvbuf=(struct demo *)tpalloc("VIEW32","demo",sizeof(struct demo))) == NULL)

     {

            (void) fprintf(stderr,"Error allocating view buffer./n");

            tpfree((char *)sendbuf);

            tpfree((char *)rcvbuf);

            tpterm();

            exit(1);

     }

 

      //给发送缓存区赋值

      sendbuf->b_id=123;

      sendbuf->balance=1895.32;

      (void)strcpy(sendbuf->name,argv[1]);

 

 

      //调用远程服务

      ret=tpcall("TOUPPER",(char *)&sendbuf,0,(char **)&rcbbuf,&rcvlen,(long)0);

 

      if(ret == -1)

      {

           //调用失败处理

      }

 

       (void) fprintf(stdout,"VIEW:  %d - %f - %s/n",rcvbuf->b_id,rcvbuf->balance,rcvbuf->name);

 

      //释放资源,省略

 

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章