スケーラブルデータベースサーバ HiRDB Version 8 コマンドリファレンス(UNIX(R)用)
EasyMTは,E.2で示した可変長ブロックテープを使用して,ボリューム名やファイル名によるテープ管理をするプログラムプロダクトです。
可変長ブロックデバイスは,導入時には作成されていません。そのため,事前に作成する必要があります。
スーパユーザが,次のコマンドを実行します。
| /etc/mknod /dev/dat/vdat010 c 119 0x010001 /bin/chmod 0666 /dev/dat/vdat010 |
EasyMTでは,次のようなヘッダ形式があります。
| シンボル | 意味 |
|---|---|
| EMTVOL_EL | EasyMTラベル |
| EMTVOL_SL | 標準ラベル |
| EMTVOL_JL | JISコードラベル |
| EMTVOL_NL | ラベルなし |
データベース作成ユティリティ(pdload)では,まずヘッダを読み込み,認識できる形式のものを読みます。認識できない場合やラベルなしの場合は,エラーとします。
EasyMTでは,次のようなレコード形式があります。
| シンボル | 意味 | ブロック指定 | レコード指定 | ラベル指定 |
|---|---|---|---|---|
| F | 固定長非ブロックレコード | N | F | SL又はEL |
| FB | 固定長ブロックレコード | B | ||
| V | 可変長非ブロックレコード | N | V | |
| VB | 可変長ブロックレコード | B | ||
| U | 不定長 | N | U |
データベース作成ユティリティ(pdload)では,上記のすべての型に対応します。しかし,ブロック長,レコード長,及びデータ長のうち,最長のものの最大値は次のようになります。
| 作成機種 | 最大値 |
|---|---|
| 3050RXグループ | 32キロバイト(32768バイト) |
| 3500シリーズ | |
| HITAC−Mシリーズ | 32キロバイト−8(32760バイト) |
F及びFBのレコード形式は,1レコードの長さが固定なので,入力がバイナリファイルで行の構成列がすべて固定長の表,又はFIX表の場合だけ使用できます。入力がアスキーファイルの場合は,データ長がすべて同じ場合だけ使用できます。
データベース作成ユティリティ(pdload)の入力としては,次の2種類のファイルが扱えます。
レコード形式には,次の種類があります。
・F(固定長非ブロックレコード)
・FB(固定長ブロックレコード)
データ長(レコード長)には,1行の長さを指定します。
行の構成列がすべて固定長の表,又はFIX表の場合だけF/FBを指定できます。
・V(可変長非ブロックレコード)
・VB(可変長ブロックレコード)
・U(不定長)
DAT形式のファイルは,1行1レコード(NL文字まで)にします。通常レコード形式はV,VB,又はUのどれかの形式にします。データ長がすべて同じ場合だけ,F又はFBが使用できます。
データ長には,NL(LF : 0x0a, '\n')を含みます。NLを含まないレコードは,エラーとなります。
以上のことをまとめると,データ長,レコード長,及びブロック長の最大・最小値は次のようになります。
| レコード形式 | データ長 | レコード長 | ブロック長 | |||
|---|---|---|---|---|---|---|
| min | max | min | max | min | max | |
| F/FB | 1 | 32768 | 1 | 32768 | 1 | 32768 |
| V/VB | 1 | 32760 | 5 | 32764 | 9 | 32768 |
| U | 1 | 32768 | − | − | 1 | 32768 |
| レコード形式 | データ長 | レコード長 | ブロック長 | |||
|---|---|---|---|---|---|---|
| min | max | min | max | min | max | |
| F/FB | 1 | 32760 | 1 | 32760 | 1 | 32760 |
| V/VB | 1 | 32752 | 5 | 32756 | 9 | 32760 |
| U | 1 | 32760 | − | − | 1 | 32760 |
3050RXグループ又は3500シリーズでEasyMT提供関数を使用して,データベース作成ユティリティ(pdload)用入力ファイルを作成する例を示します。
なお,EasyMTの定義は,MT属性定義ファイルで指定するものとします。
MT属性定義ファイルは,第1引数(argv[1])で指定します。
エラー処理は,必要に応じて指定してください。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "easymt.h"
#define PROC_BUFSIZ 1024 * 32
char buf[PROC_BUFSIZ];
int data_len; /* データ長 */
:
void main(int argc, char *argv[])
{
EmtDescr_t* emt_fp;
if (EmtInit(NULL, argv[1])) {
printf("EmtInit失敗, ,EmtErrno=%i\n", EmtErrno);
exit(EXIT_FAILURE);
}
if (emt_fp = EmtAlloc(NULL, argv[1])) {
} else {
printf("EmtAlloc失敗, ,EmtErrno=%i\n", EmtErrno);
exit(EXIT_FAILURE);
}
if (EmtFopen(emt_fp, NULL)) {
printf("EmtFopen失敗, ,EmtErrno=%i\n", EmtErrno);
goto proc_free;
}
while(データがある間) {
:
ここでbufにデータを作成する。data_lenにデータ長を代入。
DAT形式データの場合はNL(0x0a)をデータ内に含みます。
:
rc = EmtWrite(emt_fp, buf, data_len);
if (rc != data_len) {
printf("EmtWrite失敗,EmtErrno=%i\n", EmtErrno);
goto proc_close;
}
}
proc_close:
if (EmtFclose(emt_fp)) {
printf("EmtFclose失敗,EmtErrno=%i\n", EmtErrno);
goto proc_free;
}
proc_free:
if (EmtFree(emt_fp)) {
printf("EmtFree失敗,EmtErrno=%i\n", EmtErrno);
exit(EXIT_FAILURE);
}
}
|
定義ファイルで「=」の直後が空白のものは,その値を省略したことになります。
MT属性定義ファイルのうち,以下のエントリはpdloadの制御情報ファイルのsource文エントリと対応します。
| MT属性定義ファイルエントリ | pdload制御情報ファイルsource文エントリ | 最大文字数 |
|---|---|---|
| volname= | vol= | 6 |
| filename= | file= | 17※ |
bufnoエントリは単に,書き込み時にバッファ面数を何面使うかの指定なので,pdloadの指定と合わせる必要はありません。
上記のようなファイルを作成する場合の定義例を次に示します。
#/*------------------------------------------------------- # (1) 動作に対する指定 #/*------------------------------------------------------- devname=/dev/dat/vdat010 blking=OFF bufno=2 #/*------------------------------------------------------- # (2) volume属性に関する指定 #/*------------------------------------------------------- volname=HiRDB voltype=SL #/*------------------------------------------------------- # (3) file属性に関する指定 #/*------------------------------------------------------- filename=input_data openmode=EMT_WRONLY blklen=32760 reclen=32756 blktype=B rectype=V |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.