日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第104章 Caché 函数大全 $ZF 函数

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第104章 Caché 函数大全 $ZF 函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 第104章 Caché 函數大全 $ZF 函數
  • 大綱
    • 參數
  • 描述
  • 參數
    • function_name
    • args
  • 注意
    • 用`$ZF`調用UNIX?系統服務
    • 在編碼系統之間轉換字符串
    • 以零結尾并計數的Unicode字符串
    • 錯誤信息
    • 從子進程和DLL執行

第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 zferrorreturn 0;case 0:/* 收到無害信號。重新開始。 */; 繼續;case 1:/* 試圖終止JOB。 */Do cleanup workreturn 1 or 0;}}ELSE { break; }/* 處理正常情況的代碼: *//* open() 系統調用成功 */

請記住,除非通過dzfalarm(),否則不得設置任何信號處理程序。

在編碼系統之間轉換字符串

Caché通過$ZF參數類型t(或T)支持輸入輸出轉換,可以使用以下格式指定:

ArgumentPurpose
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)ZFENDint 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字符串的參數類型具有以下代碼:

ArgumentPurpose
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函數中的每一個都在單獨的參考頁中進行介紹。

總結

以上是生活随笔為你收集整理的第104章 Caché 函数大全 $ZF 函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。