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);

 

      //釋放資源,省略

 

}

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