Tuxedo資料buffer基本型別介紹
轉載:http://dev2dev.bea.com.cn/techdoc/200305561.html
作者:吳紹永是(dev2dev ID: wsywin) BEA dev2dev中文網站--線上技術論壇Tuxedo欄目版主,資深Tuxedo專家
一、 課程目標
透過本課程學習,你可以掌握如下知識:
注:後續的課程將介紹Tuxedo新增的資料型別:EFML(Embedded Record in FML)、XML Buffer
二、 String型別buffer介紹
(1)STRING型別buffer簡介
STRING型別buffer是主要用於面向行、變長度的文字資訊型別buffer。STRING型別buffer要求必須以NULL作為結束符的。如果系統採用STRING型別,那麼在配置ubbconfig檔案時,必須在*MACHINE部分配置TYPE,指明buffer型別為STRING型別。在兩種不同型別架構的機器進行buffer傳輸時候,TUXEDO對STRING型別buffer進行加碼、解碼過程。無論系統申請了多少長度的buffer,系統自動按著NULL所在的位置決定STRING型別的buffer長度。
(2)STRING型別buffer如何申請
char *SndBuf;
SndBuf = (char *) tpalloc("STRING",NULL,1024)
(3)STRING型別使用方法和呼叫方法
strcpy(SndBuf,"Bea Tuxedo");
tpcall("TOUPPER",SndBuf,0,&RcvBuf,&len,0);
三、 CARRAY型別buffer介紹
(1)CARRAY型別buffer簡介
CARRAY型別buffer是一種獨立於機器的buffer型別。使用者在使用時必須指定CARRAY型別資料的長度,CARRAY型別資料可以包含NULL字元。CARRAY型別資料不需要加、解碼過程。CARRAY型別資料可以用來傳輸漢字、二進位制資料、檔案、圖形等。CARRAY型別可以作為FML(FML32)、VIEW(VIEW32)的資料型別子項buffer。
(2)CARRAY型別buffer如何申請
tpalloc("CARRAY",NULL,1024*2)
(3)CARRAY型別使用方法和呼叫方法
四、 VIEW(VIEW32)型別buffer介紹
(1)VIEW型別buffer簡介
Tuxedo使用VIEW型別buffer處理類似C語言的結構等資料型別複雜資料。使用VIEW型別buffer可以將各資料元素與一種結構資料型別結合,透過結構就可以訪問各資料元素。VIEW型別資料即使沒有沒有資料也佔用空間,結構發生變化,需要重新編譯程式。
註明:(VIEW型別buffer是16位定址的,VIEW32是32位定址的.)
(2)VIEW型別buffer使用方法
使用VIEW型別資料步驟:
(1)建立VIEW檔案
VIEW user $ /* VIEW structure for user information */ #type cname fbname count flag size null long count COUNT 1 - - “” 0 float sumfee SUMFEE 1 - - 0.0 string usrname USRNAME 1 - 80 “” short num NUM 1 - - 0 END
|
(2)設定環境變數
/* view檔案存放路徑,使用冒號分割(NT用分號)*/
VIEWDIR=$APPDIR/inc
/* 用逗號分割的二進位制view檔案 */
VIEWFILES=user.V
export VIEWDIR VIEWFILES
(3)編譯VIEW檔案
$viewc -n user.v
viewc [-n] [-d viewdir] viewfile [viewfile ...]
或者:
viewc32 [-n] [-d viewdir] viewfile [viewfile ...]
[-d viewdir]:指定輸出檔案的路徑(預設在當前目錄下)
[-n]:指定在編譯view結構型別資料不產生FML buffer資料結構
(4)view編譯後生成的標頭檔案
struct user { /* VIEW structure for user information */ long count; float sumfee; char usrname[80]; short num; }; |
(5)VIEW型別buffer的使用
struct user *pszUser;
pszUser=(struct user *)tpalloc("VIEW"," user",sizeof(user));
…………………
pszUser ->count = 1680;
pszUser ->sumfee = 198.96;
strcpy(pszUser->usrname,"Wsy");
pszUser->num = 160;
…………………
tpcall("PSVC",(char *)pszUser,0,(char **)&pszUser,&rcvlen,0);
…………………
五、 FML(FML32)型別buffer介紹
(1)VIEW型別buffer簡介
FML型別buffer允許存取多個命名的欄位。例如:(NAME: "BEA",ADDRESS "China Beijing",PHONE "010-85281188")。每一個命名的欄位可以在buffer中存放零個或更多個(occurrences)的值.
註明:(FML型別buffer是16位定址的,FML32是32位定址的.)
(2)FML支援的資料型別:
(3)FML型別buffer使用方法
使用FML型別資料步驟:
(1)建立FML Field Table檔案
*base 1000 # name number type flags comments COUNT 1 long - - SUMFEE 2 float - - USRNAME 3 string - - NUM 4 short - - |
(2)設定環境變數
set FLDTBLDIR32="c:tuxedowsy"
set FIELDTBLS32=user.fld
其中:
FLDTBLDIR(FLDTBLDIR32):指明Field Table檔案的名字,多個用逗號分割
FIELDTBLS (FIELDTBLS32):Filed Table檔案的所在路徑,多個用冒號分割,在WinNT系統中使用分號分割.
(3)編譯FML Field Table檔案
$mkfldhdr32 user.fld
(4)FML Field Table編譯後生成的標頭檔案
/* fname fldid */ /* ----- ----- */ #define COUNT ((FLDID32)33555433) /* number: 1001 type: long */ #define SUMFEE ((FLDID32)100664298)/* number: 1002 type: float */ #define USRNAME ((FLDID32)167773163)/* number: 1003 type: string */ #define NUM ((FLDID32)1004) /* number: 1004 type: short */ |
(5)FML型別buffer的使用
FBFR32 *SndBuf;
SndBuf = (FBFR32 *)tpalloc("FML32",NULL,1024);
…………………
lCount = 1680;
Fchg32(SndBuf, COUNT,0,(char *)&lCount ,0);
fSumFee = 198.96;
Fchg32(SndBuf, SUMFEE, (char *)&fSumFee,0);
Strcpy(sUsrName , "wsy");
Fchg32(SndBuf, USRNAME, (char *)sUsrName,0);
iNum = 160;
Fchg32(SndBuf, SUMFEE, (char *)&iNum,0);
…………………
tpcall("PSVC",(char *) SndBuf,0,(char **)& SndBuf,&rcvlen,0);
Fget32(SndBuf, COUNT,0, (char *)&lCount ,0);
Fget32(SndBuf, USRNAME,0, (char *)sUsrName,0);
…………………
注:FML和VIEW型別buffer的API函式在後續的文章有詳細的介紹和程式碼分析.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267897/viewspace-1007485/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- golang資料型別基本介紹與使用Golang資料型別
- 【Redis】資料型別介紹Redis資料型別
- Rust 資料型別介紹Rust資料型別
- JAVA_資料型別介紹與基本資料型別之間的運算規則Java資料型別
- 學習變數的目的及基本資料型別介紹變數資料型別
- C#學習 [型別系統] 基本型別介紹(10)C#型別
- GBase8s資料型別介紹資料型別
- 基本資料型別資料型別
- C++中的基本變數型別介紹C++變數型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- NumPy 陣列切片及資料型別介紹陣列資料型別
- Python技術之Number資料型別介紹Python資料型別
- 基本資料型別與字串型別資料型別字串
- Java基本資料型別Java資料型別
- JavaScript基本資料型別JavaScript資料型別
- python基本資料型別Python資料型別
- 003基本資料型別資料型別
- MySQL基本資料型別MySql資料型別
- Java 基本資料型別Java資料型別
- JAVA中基本資料型別和引用資料型別Java資料型別
- 變數以及八大資料型別介紹變數大資料資料型別
- MySQL全面瓦解3:資料型別介紹與分析MySql資料型別
- string型別介紹型別
- Java中的基本資料型別與引用資料型別Java資料型別
- Redis資料型別基本操作Redis資料型別
- Java的基本資料型別Java資料型別
- java Atomic 基本資料型別Java資料型別
- 基本資料型別,for迴圈資料型別
- Python的基本資料型別Python資料型別
- (三)Python基本資料型別Python資料型別
- 3. 基本資料型別資料型別
- 基本資料型別之字串資料型別字串
- 基本資料型別轉化資料型別
- Python基本資料型別:布林型別(Boolean)Python資料型別Boolean
- Python3學習(基本資料型別-集合-字典-基本資料型別總結)Python資料型別
- python 傳送buffer型別資料, 傳送octet-stream型別資料, 傳送Uint8Array型別資料Python型別UI
- 基本資料型別與API引用型別的使用資料型別API
- Python基本資料型別之浮點型Python資料型別
- Python基本資料型別之整型Python資料型別