第104章 Caché 函式大全 $ZF 函式
第104章 Caché 函式大全 $ZF 函式
從CachéObjectScript例程呼叫非CachéObjectScript程式或函式。
大綱
$ZF("function_name",args)
引數
- function_name 要呼叫的函式的名稱。
- args 可選-傳遞給函式的一組引數值。
描述
$ZF
函式的各種形式使可以從ObjectScript例程呼叫非ObjectScript程式(例如shell或作業系統命令)或函式。可以定義介面或連結到用Caché用其他語言編寫的函式,並使用$ZF從ObjectScript例程呼叫它們。
$ZF
也可以用於:
- 生成一個子程式來執行程式或命令:
$ZF(-100)
。 - 載入動態連結庫(DLL),然後從該庫執行函式:
$ZF(–3)
,$ZF(–4)
,$ZF(–5)
,$ZF(–6)
。
$ZF
的這些實現將負數作為第一個引數。它們在各自的參考頁中進行了描述。
引數
function_name
要呼叫的函式的名稱用引號引起來,或者為負數。
args
args引數的形式為:arg1,arg2,arg3,… argn。引數可以包括諸如如何傳遞引數的描述以及要呼叫的C函式的入口點之類的項。
注意
用$ZF
呼叫UNIX®系統服務
Caché支援與KaTeX parse error: Can't use function '\textcircled' in math mode at position 14: \html@mathml{\̲t̲e̲x̲t̲c̲i̲r̲c̲l̲e̲d̲{\scriptsize R}…ZF中設定警報處理程式。通過使用這些UNIX®函式,可以區分實際錯誤,
`中斷和應重新啟動的呼叫。
函式宣告包含在cdzf.h中,並在下表中進行了描述:
宣告 | 目標 | 注意 |
---|---|---|
int sigrtclr(); | 清除重試標誌。 | 使用sigrtchk() 之前應呼叫一次 |
int dzfalarm(); | 建立新的SIGALRM處理程式。 | 在輸入$ZF 時,先前的處理程式將自動儲存。退出時,它將自動恢復。使用者程式不應更改任何其他訊號的處理。 |
int sigrtchk(); | 檢查非同步事件。 | 每當以下系統呼叫之一失敗時應呼叫:open() , close() , read() , write() , ioctl() , pause() ,當程式接收到訊號時失敗的任何呼叫。它返回指示使用者應採取的操作的程式碼:-1 =沒有訊號。檢查I / O錯誤。請參見errno變數的內容。0 =其他訊號。從中斷點重新開始操作。1 = SIGINT /。使用SIGTERM“返回0”從$ZF 退出。系統會適當捕獲這些訊號。 |
在用於控制某些裝置的典型$ZF
函式中,應編寫如下程式碼:適當地編碼這些訊號。
IF ((fd = open(DEV_NAME, DEV_MODE)) < 0) {
; Set some flags
; Call zferror
; return 0;
}
如果程式收到訊號,則開放系統呼叫可能會失敗。通常,這種情況不是錯誤,應該重新啟動操作。但是,根據訊號,可能會採取其他措施。因此,要考慮所有可能性,請考慮使用以下C程式碼:
sigrtclr();
WHILE (TRUE) {
IF (sigrtchk() == 1) { return 1 or 0; }
IF ((fd = open(DEV_NAME, DEV_MODE)) < 0) {
switch (sigrtchk()) {
case -1:
/* 真實的裝置錯誤 */
; 設定標誌
Call zferror
return 0;
case 0:
/* 收到無害訊號。重新開始。 */
; 繼續;
case 1:
/* 試圖終止JOB。 */
Do cleanup work
return 1 or 0;
}
}
ELSE { break; }
/* 處理正常情況的程式碼: */
/* open() 系統呼叫成功 */
請記住,除非通過dzfalarm()
,否則不得設定任何訊號處理程式。
在編碼系統之間轉換字串
Caché通過$ZF
引數型別t(或T)支援輸入輸出轉換,可以使用以下格式指定:
Argument | Purpose |
---|---|
t | 指定當前程式I / O轉換物件。 |
t// | 指定預設的程式I / O轉換表名稱。 |
t/name/ | 指定特定的I / O轉換表名稱。 |
$ZF
通過放置在以下C結構中的計數字節字串將轉換後的字串傳送到外部過程:
typedef struct zarray {
unsigned short len;
unsigned char data[1]; /* 1 is a dummy value */
} *ZARRAYP;
這也是用於b(或B)引數型別的結構。
以下$ZF示例函式執行往返轉換:
#include cdzf.h
extern int trantest();
ZFBEGIN
ZFENTRY("TRANTEST","t/SJIS/ T/SJIS/",trantest)
ZFEND
int trantest(inbuf,outbuf);
ZARRAYP inbuf; /* 緩衝區,其中包含在傳遞給此函式之前從內部Caché編碼轉換為SJIS編碼的字串 */
ZARRAYP outbuf; /* 包含SJIS編碼字串的緩衝區,在將其傳遞迴Caché環境之前,該字串將轉換回內部Caché編碼 */
{
int i;
/* 從輸入引數緩衝區一次複製一個位元組到輸出引數緩衝區 */
for (i = 0; i < inbuf->len; i++)
outbuf->data[i] = inbuf->data[i];
/* 設定輸出引數緩衝區n中的資料位元組數 */
outbuf->len = inbuf->len;
return 0; /* Return success */
}
注意:從概念上講,資料流入和流出$ZF
外部過程,就好像外部過程是裝置一樣。 I / O轉換的輸出元件用於傳遞到外部過程的資料,因為資料“離開”了Caché環境。 I / O轉換的輸入元件用於從外部過程接收的資料,因為資料正在“進入”Caché環境。
如果未定義I / O轉換的輸出元件,並且應用程式嘗試使用該I / O轉換傳遞除空字串以外的任何內容,則Caché返回錯誤,因為它不知道如何轉換資料。
如果未定義I / O轉換的輸入元件,並且型別字串的引數將該I / O轉換與$ZF
輸出引數關聯,則Caché返回錯誤,因為具有未定義轉換的輸出引數是無目的的。
以零結尾並計數的Unicode字串
$ZF
函式支援以零結尾的Unicode字串和計數的Unicode字串的引數型別。即使在內部不使用Unicode字元的Caché版本中也支援這些功能。
零終止的Unicode字串和計數的Unicode字串的引數型別具有以下程式碼:
Argument | Purpose |
---|---|
w | 指向以零結尾的Unicode字串的指標。 |
s | 指向計數的Unicode字串的指標。 |
對於這兩種引數型別,Unicode字元的C資料型別都是無符號的縮寫。指向以零結尾的Unicode字串的指標宣告如下:
unsigned short *p;
指向已計數的Unicode字串的指標被宣告為指向以下C結構的指標:
typedef struct zwarray {
unsigned short len;
unsigned short data[1]; /* 1 is a dummy value */
} *ZWARRAYP;
例如:
ZWARRAYP *p;
len欄位包含Unicode字元陣列的長度。
資料欄位包含計數的Unicode字串中的字元。 Unicode字串的最大大小是$ZF
字串的最大大小,這是一個可更新的配置引數,預設為32767。
每個Unicode字元長兩個位元組。在將Unicode字串宣告為輸出引數時,考慮到這一點很重要,因為Caché保留了可能傳回的最長字串的空間。使用預設字串大小時,單個Unicode字串引數的總記憶體消耗計算如下:
最多32767個字元*每個字元2個位元組=總65534個位元組。
這接近為所有$ZF
引數分配的預設最大記憶體區域,即67584。該最大$ZF
堆區域也是可更新的配置引數。
錯誤資訊
$ZF
堆區用完後,$ZF
發出錯誤。 $ZF
字串堆疊用盡時,$ZF
發出錯誤。當$ZF
無法分配夥伴塊時,它將發出<STORE>
錯誤。
從子程式和DLL執行
$ZF
函式可以將負數作為其第一個引數。這些負數指定支援產生的子程式和動態連結庫(DLL)的功能。這些$ZF
函式中的每一個都在單獨的參考頁中進行介紹。
相關文章
- 第111章 Caché 函式大全 $ZNAME 函式函式
- 第四十章 Caché 函式大全 $METHOD 函式函式
- 第六十三章 Caché 函式大全 $SORTEND 函式函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- Hive函式大全Hive函式
- mysql函式大全MySql函式
- PHP函式大全PHP函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- javascript常用函式大全JavaScript函式
- PHP常用函式大全PHP函式
- oracle 10g函式大全–日期型函式Oracle 10g函式
- Python 內建函式大全Python函式
- Js字串操作函式大全JS字串函式
- JavaScript 工具函式大全(新)JavaScript函式
- 第4章函式函式
- Excel函式公式大全,辦公文員必備Excel函式公式Excel函式公式
- 遞迴函式例項大全遞迴函式
- 第 8 節:函式-函式定義和引數函式
- 第 8 節:函式-函式型別與作用域函式型別
- 測開之函式進階· 第2篇《純函式》函式
- 測開之函式進階· 第4篇《匿名函式》函式
- 測開之函式進階· 第5篇《偏函式》函式
- Python3中的函式 大全Python函式
- PHP經常用到的函式大全PHP函式
- excel中最常用的30個函式 excel表格常用函式技巧大全Excel函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 第 8 節:函式-函式巢狀呼叫與返回值函式巢狀
- 測開之函式進階· 第1篇《遞迴函式》函式遞迴
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 《MySQL 入門教程》第 16 篇 MySQL 常用函式之日期函式MySql函式
- (譯) 函式式 JS #2: 函式!函式JS
- Python內建函式大全,快來看看!!Python函式
- Python 字串 String 內建函式大全(1)Python字串函式
- Python 字串 String 內建函式大全(2)Python字串函式
- 核函式 多項式核函式 高斯核函式(常用)函式
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter