I/Oコマンド

この章では、以下の GT.Mの I/Oコマンドについて説明します:

Open

OPENコマンドは、GT.Mプロセスからデバイスへ接続を確立します。

OPENコマンドのフォーマットは:

O[PEN][:tvexpr] expr[:[(keyword[=expr][:...])][:numexpr][:expr]][,...]
  • オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。

  • 必要な式は、OPENをデバイスに指定します。

  • オプションのキーワードはデバイスの動作を制御するデバイスパラメータを指定します;いくつかのデバイスパラメータは、等号(=)で区切られた引数を取ります; もし引数のデバイスパラメータが1つだけの場合は、周りの括弧は省略可能です。

  • オプションの数値式は、失敗した場合にコマンドがタイムアウトすべきその後の時間を秒単位で指定します; 0 秒はデバイスを開くための単一の試みを与えます。

  • タイムアウトを指定しているOPENコマンドにデバイスパラメータが含まれていない時には、デバイスの式からタイムアウトの数値式を二重コロン(::)で区切ります。

  • オプションの式は、デバイスのバインディングを選択するニーモニック スペースを指定します。GT.Mが現在受け入れている唯一のニーモニック スペースは SOCKET と PIPE です。

  • OPENコマンドがタイムアウトなしでニーモニック スペースを指定する時に、ダブルコロンがデバイス・パラメータからニーモニック スペース文字列式を分離します ; もしタイムアウトもデバイスパラメータどちらも存在しない場合、トリプルコロンがデバイス式からニーモニック スペースを分離します。

  • PIPEのニーモニック スペースのトリプルコロンはエラーを発生します。
  • 間接指定演算子と1つ以上のOPENの引数リストに評価される原子式(expression atom)は、OPENのための正当な引数を構成します。

  • シーケンシャル・ファイルの場合、複数のプロセスが同じファイルをOPENコマンドで読み取るために開くことができます。

デフォルトでは、デバイスが使用できない時、GT.Mは約1秒間隔で無期限にOPENをリトライします。別のプロセスが排他的にそれを使用されている時に、または、プロセスをOPENすることがデバイスを開くために残されたリソースを持っていない時には、デバイスは使用できません。

OPENで他のすべてのエラーは、エラー状態と割込みプログラムフローを発生します。タイムアウトは、デバイスが使用できないままの残っている時にGT.Mルーチンがプログラム制御を取り戻すためのツールです。OPENがタイムアウトを指定する時、GT.Mは、OPENが成功するかタイムアウトの期限が切れるかのどちらかまで、リトライを続けます。

もしOPENがタイムアウトが満了する前にデバイスとの接続を確立する場合、GT.Mは $TEST にTRUE(1)をセットします。もしタイムアウトの期限が切れる場合、GT.Mは $TEST にFALSE(0)をセットします。もしOPENコマンドがタイムアウトを指定しない場合、コマンドの実行は $TEST には影響しません。

プロセスが以前にデバイスをOPENしていない場合、OPENで提供されていないデバイスパラメータはすべてデフォルト値を使用します。以前に閉じたデバイスを再OPENすると、GT.Mプロセスは、OPENで指定されていないすべての特性を、SD, FIFO, PIPEを除いて最後にCLOSEされたときにデバイスが持つの値に復元します。GT.Mはシーケンシャル・ディスク・ファイルを別々に扱い、すべてのOPENで不特定のシーケンシャル・ディスク・ファイル特性のデフォルトを使用します; つまり、シーケンシャル・ディスク・ファイルのCLOSEのデフォルトでは、DESTROYが指定されているかのように動作し、シーケンシャル・ディスク・ファイルの特性をCLOSEに保持するには、明示的なNODESTROYが必要です。

NODESTROY デバイスパラメータを持つシーケンシャル・ディスク・デバイスのCLOSEの場合、デバイスパラメータを持たないデバイスの後続のOPENは、そのファイル位置を含むデバイス状態を復元します; またはSEEKデバイスパラメータで指定されたファイル位置に移動します。$ZCHSET がFIXED形式のUTF文字セットを指定した場合、そのデバイスはクローズの前に少なくとも1つのREADを完了していなければならないことに注意してください。追加のデバイスパラメータを持つOPENは、デバイスの位置をファイルの先頭に、またはAPPENDが指定されている場合はファイルの最後に配置します。次に、デバイスパラメータとして指定されたSEEKが適用されます。

もしユーザの選択に基づいてデバイスをOPENやCLOSEするメニュー駆動型のアプリケーションを使用している場合、すべてのOPENが明示的にアプリケーションに重要なすべてのデバイスパラメータを含んでいることに。十分注意してください。

もしプロセスが既にOPENしているデバイスをOPENする場合は、GT.Mは、デバイスが新しいデバイスパラメータ仕様を反映するためにOPENする時に、変更を受け入れる任意の特性を変更します。

UTF-8モードでは、OPENコマンドは、入力/出力デバイスのエンコーディングを決定するための追加の3つデバイスパラメータとしてICHSET、OCHSET、CHSETを認識します。

Mモードでは、OPENコマンドは ICHSET、OCHSET、CHSET、PADのデバイス・パラメータを無視します。

I / Oデバイスがマルチバイト文字エンコーディングを使用する場合、そのデバイスのREADおよびWRITE操作はすべて、ICHSETまたはOCHSETを使用して、指定された文字エンコーディングに従って正しい形式の文字をチェックします。I / Oコマンドが不正なバイトシーケンスに遭遇すると、それらは常にランタイムエラーを引き起こします; VIEW "NOBADCHAR" はそのようなエラーを防ぎません。$ZCHAR() やその他の Z 相当の関数で作成された文字列には、不正なシーケンスが含まれることがあります。このような不正なシーケンスを入力または出力する唯一の方法は、これらのデバイスパラメータの1つで文字セット「M」を指定することです。

OPENの例

例:

set sd="report.dat" open sd:newversion

これは、読み取りと書き込みアクセスの両方のために report.dat という名前のシーケンシャルディスクファイルのNEWVERSIONをOPENします。

OPEN デバイスパラメータ

APPEND

APPEND を適応 : SD(シーケンシャル・デバイス)

end-of-file (EOF)にファイルポインタの置きます。このデバイスパラメータは、ファイルがCLOSE NODESTROYの場合、最初のOPENコマンドまたはOPENコマンドのデバイスにのみ影響します。このデバイスパラメータで既にOPENされているデバイスを再度OPENすることは効果がありません。デフォルトでは、OPENはファイルの始め(beginning-of-file)にファイルポインタをセットします。

[注意] 注意

APPEND が SEEK デバイスパラメータと組み合わされると、デバイスパラメータのオーダーに関係なく、APPENDが最初に実行されます。

例:

set sd="foo.txt"
open sd:(append:recordsize=70:wrap)
use sd

この例では、ファイル foo.txt を開き、ファイルポインタをファイルの最後に配置します。

ATTACH

ATTACH=expr を適応 : SOC(ソケット)

ATTACH は新しく作成されたソケットにハンドル名として expr を代入します。ATTACH が使用され、LISTENまたはCONNECT のいずれかが同じOPENで指定されている場合、expr の値は新しく作成されたソケットの識別子になります。LISTENもCONNECTも指定されていない場合、ATTACHは無視されます。

ATTACHとUSEの使用方法については、USE デバイスパラメータのセクションの“ATTACH” を参照してください。

例:

open tcpdev:(ichset="M":connect=hostname_":"_portno_":TCP":attach="client"):timeout:"SOCKET"

この例では、ATTACHデバイスパラメータを使用して、新しく作成されたソケットの識別子として "client" を指定しています。GT.MはUTF-8モードでのみ ICHSET を認識します。

CHSET

CHSET=expr を適応 : すべてのデバイス

UTF-8モードでOPENされているデバイスの入力デバイスと出力デバイスの両方に共通のエンコーディングを確立します。式の値は、 M, UTF-8, UTF-16, UTF-16LE, UTF-16BE です。詳細は、 “ICHSET”“OCHSET” を参照してください。

コマンド

COMMAND=expr を適応:PIPE

新しく作成されたシェル・プロセスが実行するUNIXコマンドを指定します。無効なコマンド値は、OPENを発行するプロセスではなく、新しいプロセスでエラーをトリガーします。これにより、診断が困難になる可能性があります。 “PARSE” デバイスパラメータを参照してください。

CONNECT

CONNECT=expr を適応 : SOC(ソケット・デバイス)

expr によって提供される情報によって位置付けられる、サーバーとのクライアント接続を作成します。もし操作が成功した場合、新しいソケットはクライアント接続に割り当てられ、デバイスの現ソケットが作られます。

expr は、プロトコルとプロトコル固有の情報を指定します。現在、GT.M は、TCP / IPとLOCAL(UNIXドメインとも呼ばれます)ソケット・プロトコルをサポートしています。TCP / IPソケットの場合は、 "<host>:<port>:TCP" の形式で expr を指定します。ここで、host はオプションで IPv4 / IPv6アドレスで、角かっこ([])でカプセル化されています( "127.0.0.1", "::1", "[127.0.0.1]", または "[::1]"、またはserver.fis-gtm.comのような IPv4 or IPv6 ホスト名 )。ホスト名を指定すると、GT.MはDNSから返された最初のアドレスのIPバージョンを使用します:

  • オペレーティングシステムでサポートされていて、

  • ネットワークインタフェースが存在。

LOCALソケットの場合、 "<pathname>:LOCAL" の形式で expr を指定します; ここで、<pathname> は通信に使用するファイルの名前です。<pathname> には、GT.Mがシーケンシャル・ファイルのデバイス名と同じ方法で展開する環境変数の名前の後にドル記号($)を含めることができます。展開されたパス名の最大許容長は、OSによって異なります。

LOCALソケットの場合、CONNECTは指定されたファイルをオープンしようとします。存在しないかリスナーがない場合、CONNECTは、成功するか、指定されたタイムアウトが切れるまで再試行します。

[注意] 注意

CONNECTはLISTENと互換性がありません。

OPENがタイムアウトを指定しない場合、SOCKET OPENは接続が完了するのを待つか、試行を終了するイベントを待ちます。

例:

open tcpdev:(connect=hostname_":"_portno_":TCP":attach="client":ioerror="TRAP"):timeout:"SOCKET" 

この例では、"hostname:port:TCP" という形式の接続文字列を使用して、クライアントとサーバーとの接続を確立します。

DELIMITER

[NO]DELIMITER=expr を適応:SOC(ソケット・デバイス)

DELIMITER は、新しく作成されたソケットで使用される区切り文字のリストを確立または置き換えます。デフォルトは NODELIMITER です。それが明示的に置換または削除されるまで、以前から存在するデバイス上の区切り文字のリストは変わりません。

expr は、次の文字が特別な解釈を持つ文字列です:

  • ':' は、区切り文字で分離するために使用されます(それは、区切り文字による区切り文字です)。

  • '/' は文字として機能するので、区切り文字の一部としてコロンを使用するには // を使用し、// 区切り文字の一部としてスラッシュを使用します。

[注意] 注意

expr "ab:/:://:bc" は、"ab", ":", "/", "bc" から成る4つの区切り文字として解釈されます。一つのソケットには、0から64までの区切り文字を持つことができ、それぞれの区切り文字は、1〜64文字を含めることができます。

例:

open tcpdev:(connect=host_":"_portno_":TCP":delim=$c(13):attach="client"):timeout:"SOCKET" 

このコマンドは、ソケット tcpdev の区切り文字として$CHAR(13) を指定します。

EXCEPTION

EXCEPTION=expr を適応:すべてのデバイス

I/Oデバイスのエラーハンドラを定義します。この式には、GT.Mがエラーを検出したときにGT.MがXECUTEするGT.Mコード(たとえばGOTO ERRFILE)、または、現在の gtm_ztrap_form に応じてGT.Mが制御を移す入り口参照(entryref) が含まれている必要があります。EXCEPTIONアクションで暗黙的にポップすることはありません。

デバイスEXCEPTIONは、他の致命的でないエラーの後で、致命的でないデバイスエラーと$ ETRAP / $ ZTRAPが制御を取得した後に制御を取得します。

例:

GTM>do ^FREAD
FREAD;
 zprint ^FREAD
 read "File > ",sd
 set retry=0
 set $ztrap="BADAGAIN"
 open sd:(readonly:exception="do BADOPEN")
 use sd:exception="goto EOF"
 for  use sd read x use $principal write x,!
EOF;
 if '$zeof zmessage +$zstatus
 close sd
 quit
BADOPEN;
 set retry=retry+1
 if retry=2 open sd
 if retry=4 halt
 if $piece($zstatus,",",1)=2 do
 . write !,"The file ",sd," does not exist. Retrying in about 2 seconds ..."
 . hang 2.1
 . quit
 if $piece($zstatus,",",1)=13 do
 . write !,"The file ",sd," is not accessible. Retrying in about 3 seconds ..."
 . hang 3.1
 . quit
 quit
BADAGAIN;
 w !,"BADAGAIN",!

File >

この例では、ファイルの名前を尋ね、その内容を表示します。そのファイルをREADONLYとして開き、EXCEPTIONを指定します。OPENの例外ハンドラは、file-not-found および file-access エラーを処理し、エラー時にOPENコマンドを再試行します。1番目のUSE使用は、ファイル終了(end-of-file)を処理するEXCEPTION(例外)を設定します。FORループは1回にファイルの1レコードを読み、プリンシパル(主)デバイスへ各レコードを転送します。EXCEPTIONの中のGOTOは、FORループを終了します。ラベルEOFの地点で、もし$ZEOFがfalseならば、コードはトリガされた例外のそのエラーを再発行します。それ以外の場合、CLOSEはファイルを解放します。

EMPTERM

[NO]EMPT[ERM] を適応 : TRM

空の入力行にある "Erase" 文字を使って、READコマンドまたはREAD # コマンドを終了できます。デフォルトは NOEMPTERMです。 gtm_principal_editing 環境変数は、[NO]EMPTERMの初期設定を指定します。TERM環境変数の現在の値で指定されたTERMINFOは、 "Erase" の文字列を持つcapnames の値 "kbs" および/または "kdch1" を定義します。"kbs" または "kdch1" が複数文字の値である場合は、EMPTERM認識のためにESCAPEまたはEDITのデバイスパラメータも指定する必要があります。

stty によって設定され表示される消去文字も、空の入力行でREADコマンドを終了します。この消去文字は、stty shell コマンドを使用してさまざまな値に設定できます。消去文字の典型的な値は<CTRL-H>と<CTRL-?>です。設定され stty 設定で表示される文字は、ターミナル・エミュレータが送信する文字と一致する必要があります。

環境変数TERMは、ターミナル(またはターミナル・エミュレータ)が送信し、期待するものの両方に一致するterminfoエントリを指定する必要があります。

FIFO

FIFO を適応 : FIFO

OPENのためのデバイスは、FIFOの名前であることを指定します。もしそれがまだ存在しない場合、そして、もしプロセスが十分な権限を持つ場合、GT.MはFIFOを作成します。しかし、プロセスが適切な特権を持っていないイベントでは、プロセスは実行時(run-time)エラーを生成します。プロセスは、既存FIFOをOPENするために任意の権限を必要としません。FIFOは他のファイルと同様に読み込み可能(または書き込み可能)である必要があります。

例:

open file:(fifo:read:recordsize=1048576):100 
FIXED

[NO]FIXED を適応 : SD FIFO PIPE

シーケンシャル・ディスク・ファイルの固定長レコード・フォーマットを選択します。FIXEDは、レコードの実際の長さを指定しません。レコードの長さを指定するために RECORDSIZE を使用してください。

NOFIXEDは、シーケンシャル・ディスク・ファイルの可変長レコード形式を指定します。NOFIXEDは、VARIABLEと同意語です。FIXED は、STREAM と VARIABLE と両立しません。デフォルトでは、レコードはVARIABLE 長のレコード形式です。

[注意] 注意

固定長レコードは、改行(LF)などの埋め込みレコード・ターミネータを暗黙的に使用しません。

UTF-8モードでは、GT.Mの I / Oは、各レコードをRECORDSIZEバイトとして扱い、ファイルのよりレコード指向のビューを強制します。Unicodeコードポイントはレコード間で決して分割されないことに注意してください。マルチバイト文字(CHSETがUTF-8の場合)またはサロゲートペア(CHSETがUTF-16の場合)がレコードに収まらない場合(WIDTHまたはRECORDSIZEによって指定された物理的な論理)、WRITEコマンド物理レコードを埋めるために、PADデバイスパラメータで指定されたバイト値を使用します。結合文字は、現在のレコードに収まらない場合、後続のレコードで終わる可能性があります。

[注意] 注意

PADは、Unicode CHSETで開かれたデバイスに対してのみ有効です。Mモードでは、PADは常に<SP> です。

例:

GTM>do ^fixedex
fixedex;
  zprint ^fixedex
  set file="fix.txt"
  open file:(newversion:fixed:recordsize=4)
  use file
  write "Hello, World",!
  close file
  set file="fixnowrap.txt"
  open file:(newversion:fixed:recordsize=4:nowrap)
  use file
  write "Hel",!
  write "lo, World",!; This writes only 'lo, '
  close file
  zsystem ("more fix*.txt")
  zsystem ("od -cb fix.txt")
  zsystem ("od -cb fixnowrap.txt")
  quit
::::::::::::::
fix.txt
::::::::::::::
Hello, World
::::::::::::::
fixnowrap.txt
::::::::::::::
Hel lo,
0000000   H   e   l   l   o   ,       W   o   r   l   d
        110 145 154 154 157 054 040 127 157 162 154 144
0000014
0000000   H   e   l       l   o   ,
        110 145 154 040 154 157 054 040
0000010

例:

GTM>zprint ^gtmcp
gtmcp ; Copy a binary file using GT.M
  new dest,line,max,src
  if 2>$length($zcmdline," ") write "$gtm_dist/mumps -r source target",!
  set dest=$piece($zcmdline," ",2)
  set src=$piece($zcmdline," ",1)
  set max=1024*1024 ; the maximum GT.M string size
  open src:(readonly:FIXED:WRAP:CHSET="M") ;
  open dest:(newversion:FIXED:WRAP:CHSET="M") ; use FIXED format because it does not insert carriage control characters after $X reaches its maximum value.
  for  use src read line#max quit:$zeof  use dest write line
  close src
  use dest
  set $x=0
  close dest
  quit

この例では、GT.Mを使用してバイナリ・ファイルをコピーします。

FOLLOW

[NO]FOLLOW は適応 : SD

完全なレコードがあるか、または指定されたタイムアウトに達した場合にのみ、READを返すように設定します。EOF(end-of-file)の条件で終了するのではなく、より多くの入力を待機します。

USEコマンドは、デバイスをNOFOLLOWからFOLLOWへ、またはFOLLOWからNOFOLLOWへ切り替えることができます。これは、UNIX の tail -f に似たREADの動作モードを提供します。

GROUP

GROUP=expr は適応 : SOC(LOCAL) SD FIFO

ファイル所有者のグループ内で他のユーザのために、UNIXファイルのアクセス権を指定します。式は、null で、または、読み取り,書き込み,実行アクセスのそれぞれを示す RWX 文字の任意の組み合わせで、評価する文字列です。新しいファイルのOPENにデバイスパラメータ(OWNER、GROUP、WORLD)を制御する権限が表示されている場合、明示的に指定されていないユーザーカテゴリ(OWNER、SYSTEM、WORLD)にはデフォルトのアクセス許可が与えられます。これらデバイスパラメータのいずれかが既存のデバイスのOPENで現れた時、明示的に指定されていないユーザカテゴリは変更されずに残ります。

ファイルのセキュリティを変更するためには、OPENを発行するユーザが、所有権を持っている必要があります。

GROUP、SYSTEM、OWNER、またはWORLDのいずれもOPENに指定されていない場合、GT.Mは既存のファイルのパーミッションを変更せず、新しいファイルは標準のUNIXルールを使用して作成されます。

例:

open "test52.txt":(append:group="rw") 

この例では、読み取り書き込みグループアクセスを持つ追加モードでファイル test52.txtを開きます。text52.txt ファイルを開くユーザーには、その所有権が必要であることに注意してください。

ICHSET

ICHSET=expr を適応:すべてのデバイス

UTF-8モードでOPENされている入力デバイスの文字エンコーディングを確立します。式の値は、 M, UTF-8, UTF-16, UTF-16LE, UTF-16BE です。Mモードでは、ICHSETは効果がありません。

ICHSETが指定されていない場合、GT.Mはデバイスからの入力のデフォルト文字セットとしてUTF-8を想定します。

expr が M、UTF-8、UTF-16、UTF-16LE、UTF-16BE以外の値に設定されていると、GT.Mは実行時エラーを生成します。UTF-16、UTF-LE、UTF-16BEは、$Principal と ターミナル・デバイスではサポートされていません。

[注意] 注意

ICHSET は、OPENコマンドのデバイスパラメータであり、USEコマンドのデバイスパラメータではありません。GT.Mはアプリケーションコードが実行される前に$PRINCIPALを暗黙的にオープンしているので、ICHSETは$Principalには適用されません。

INDEPENDENT

INDEPENDENT を適応:PIPE

INDEPENDENTデバイスパラメータは、新しく作成されたプロセスがデバイスのCLOSEによって終了されないことを指定します。INDEPENDENT プロセスの入出力は、デバイスのCLOSE後も独立して実行されるように処理する必要があります。デフォルトでは、CLOSE は PIPEデバイスに関連付けられたプロセスを終了します。

IKEY

IKEY は適応 : SD, PIPE, と FIFO

IKEYでは、デバイスへのREADに別のキーを使用できます; たとえば、GT.MプロセスがUNIXパイプの要素である場合などです。IKEYデバイスパラメータの形式は次のとおりです:

IKEY="key_name [IV]"

key_nameは大文字と小文字を区別し、gtmcrypt_configファイルの "files"セクションのキー名と一致する必要があります。オプションのIVは、暗号化と復号化に使用する初期化ベクトルを指定します。

詳細については、OPENまたはUSEのKEYデバイスパラメータの説明を参照してください。

IOERROR

IOERROR=expr は適応 :SOC(ソケットデバイス)

ソケットデバイスで例外処理を有効にします。exprは、I/Oエラーのトラップモードを指定します。"TRAP" に等しい値は、デバイス上のI/Oエラーがエラー条件を発生させることを指定します。"NOTRAP" に等しい値、または、IOErrorが指定されていない時、デバイス上のI/Oエラーがエラー条件を発生させないことを示しています。

[注意] 注意

IOERROR設定はソケットに関連付けられ、EXCEPTIONはSOCKETデバイスに関連付けられます。換言すれば、IOERRORは、SOCKETデバイスに関連する各ソケットに対してオンまたはオフにすることができますが、すべてのソケットに使用されるEXCEPTION値は1つだけです。

例:

open sock:(connect=host_":"_port_":TCP":delim=$char(13,10):ioerror="TRAP")::"SOCKET" 

この例では、ソケット接続を開き、デバイスのI / Oエラーによってエラー状態が発生することを指定しています。

KEY

IKEY は適応 : SD, PIPE, と FIFO

暗号化されたデータの読み取りと書き込みに使用するキー・ファイルに関する情報を指定します。KEYデバイスパラメータのシンタックスは次のとおりです:

KEY="key_name [IV]"

key_nameは大文字と小文字を区別し、gtmcrypt_configファイルの "files"セクションのキー名と一致する必要があります。オプションのIVは、暗号化と復号化に使用する初期化ベクトルを指定します。

暗号化と説明を行うために、GT.Mは、GT.Mの暗号化APIを使用して暗号化プラグインを呼び出し、APIに準拠するライブラリを使用できます。暗号化プラグインは、暗号機能のためにユーザーが選択した暗号ライブラリを呼び出すことができます。キー名とIVは、バイトのバイナリ・シーケンスとして参照実装プラグインに渡されます。GT.Mは、デバイスパラメータ内の最初のスペースのみを使用してキーの終わりを区切るため、IVにはスペースを含む任意のコンテンツを含めることができます。GT.Mランタイムシステムは、プラグインを使用して、使用されている暗号ライブラリにIVを渡します。これは、IVの長さを使用して、必要なサイズよりも小さいIVがゼロでパッドされているかどうか、および、必要な長さよりも長いIVがエラーを生成するかどうかを判断します。FISは、IVバイトシーケンスを構築するときに $CHAR() よりも$ZCHAR() を使用し、IVシーケンスが意図せずに数値変換されていないことを確認することを推奨しています。

(空のキーを指定することによって)暗号化を無効にすることを含む、暗号鍵またはIVの変更を試みる KEY / IKEY / OKEY デバイスパラメータを持つ USE コマンドは、最初のWRITEまたはREADの前にのみ成功するか、または暗号化または復号化の状態の後にリセットされます、たとえば、REWIND(READの場合のみ)やファイルの開始時のTRUNCATEの後(READとWRITEの両方の場合)など。

別々のIKEYとOKEYのデバイスパラメータは、READとWRITEの異なるキーをデバイスに許可します。たとえば、GT.MプロセスがUNIXパイプの要素である場合などです。暗号化の暗号分はステートマシン(ファイルの先頭でIVで初期化される)を使用するため、GT.Mは、ファイルの先頭または最後のREADまたはWRITE操作が完了した位置でのみ、READおよびWRITE操作を許可します。特に、空でないファイルをAPPENDモードで開くことはできません; SEEKデバイスパラメータは禁止されています; そして、TRUNCATEはファイルの先頭または末尾でのみ許可され、前者は内容を削除し、後者は事実上no-opを許可します。

[注意] 注意

暗号化されたファイルは、最初から順番に書き込み読み取りをしなければなりません(UTFファイルのバイト・オーダー・マーカーを含む); GT.Mは、暗号化されていないファイルに対してのみ、ファイル内の任意の場所でREADおよびWRITE操作をサポートします。

例:

キーとIVを使用して暗号化されたファイルを作成し、そのデータをテスト環境で解読する基本的な手順は次のとおりです:これらの手順は、デモンストレーション用です。プロダクション環境で使用する前に、ステップを理解し、適切に調整する必要があります。たとえば、プロダクション環境では、キーファイルを不正なアクセスから保護された適切なパーミッション(ディレクトリの場合は0500、個々のファイルの場合は0400など)で保護する必要があります。ファイルの暗号化は、包括的なセキュリティ計画の多くの要素の1つにすぎません。

export LD_LIBRARY_PATH=/usr/local/lib
export GNUPGHOME=$PWD/mygnupg
$gtm_dist/plugin/gtmcrypt/gen_keypair.sh mykeypair@gtm Keymaster
$gtm_dist/plugin/gtmcrypt/gen_sym_key.sh 0 Sunday.key
$gtm_dist/plugin/gtmcrypt/gen_sym_key.sh 0 Monday.key
$gtm_dist/plugin/gtmcrypt/gen_sym_key.sh 0 Tuesday.key
$gtm_dist/plugin/gtmcrypt/gen_sym_key.sh 0 Wednesday.key
$gtm_dist/plugin/gtmcrypt/gen_sym_key.sh 0 Thursday.key
$gtm_dist/plugin/gtmcrypt/gen_sym_key.sh 0 Friday.key
$gtm_dist/plugin/gtmcrypt/gen_sym_key.sh 0 Saturday.key
echo -n "Enter password for gtm_passwd";export gtm_passwd="`$gtm_dist/plugin/gtmcrypt/maskpass|cut -f 3 -d " "`"
export gtmcrypt_config=mygtmcryptfile
cat mygtmcryptfile
 files: {
 CustomerReportKey1: "Sunday.key";
 CustomerReportKey2: "Monday.key";
 CustomerReportKey3: "Tuesday.key";
 CustomerReportKey4: "Wednesday.key";
 CustomerReportKey5: "Thursday.key";
 CustomerReportKey6: "Friday.key";
 CustomerReportKey7: "Saturday.key";
};
$gtm_dist/mumps -dir
GTM>zprint ^encrfile
encrfile
 set now=$horolog
 set timestamp=$zdate(now,"YYYYMMDDAM1260SS")
 set dayofweek=$zdate(now,"DAY","","1,2,3,4,5,6,7")
 set file="Customers"_timestamp_".log"
 open file:(newversion:key="CustomerReportKey"_dayofweek_" "_timestamp)
 use file
 write "Customer Report - Page 1",!
 close file
 write "IV : ",timestamp,!,"Key : CustomerReportKey"_dayofweek
GTM>do ^encrfile
IV : 20140911AM042419
Key : CustomerReportKey5
GTM>zprint ^readencrfile
readencrfile(key,iv)
 set file="Customers"_iv_".log"
 open file:(key=key_" "_iv)
 use file
 for read data use $principal write data,!use file quit:$zeof
 close file
GTM>do ^readencrfile("CustomerReportKey5","20140911AM042419")
Customer Report - Page 1
GTM>

この例では、キー名は CustomerReportKey、曜日を表す数字、IVはファイル名の一部でもあるタイムスタンプです。すべてのレポートは同じ文字列 "Customer Report - Page 1" で始まりますが、ファイルごとに異なるIVを使用すると、暗号化されたデータが異なるバイト列で始まり、 そのIVをファイル名の一部にすることで、レポートの受信者(誰がキーにアクセスするか)は、コンテンツの復号化に必要なIVを容易に推論することができることを保証します。

LISTEN

LISTEN=expr を適応 : SOC(ソケット・デバイス)

新しいソケットが接続をリッスンするように割り当てられます。もしオペレーションが成功する場合、デバイス用に現在のソケットが作られます。正常終了すると、$KEYは、"LISTENING|<socket_handle>|{<portnumber>|</path/to/LOCAL_socket>}" の形式に設定され、そうでなければ$KEYに空の文字列が割り当てられます。

expr はプロトコルとプロトコル固有の情報を指定します。現在、GT.M は、TCP / IPとLOCAL(UNIXドメインとも呼ばれます)ソケット・プロトコルをサポートしています。TCP / IPソケットの場合、 "<port>:TCP" の形式でexprを指定します。

<port>=0を指定すると、システムはTCP / IPソケットのポートを選択します。

LOCALソケットの場合:

  • expr を "<pathname>:LOCAL" の形式で指定します。<pathname>は通信に使用するファイルの名前です。<pathname> には、GT.Mがシーケンシャル・ファイルのデバイス名と同じ方法で展開する環境変数の名前の後にドル記号($)を含めることができます。展開されたパス名の最大許容長は、OSによって異なります。

  • ファイルが存在しない場合、LISTENはそのファイルを作成します。OPENコマンドがNEWVERSIONデバイスパラメータを指定すると、パス名で指定されたファイルが存在し、ソケットファイルであればそのファイルは削除され、GT.Mは新しいファイルを作成します。

  • OPENでLISTENを指定すると、シーケンシャル・ファイルのOPENと同じGROUP、OWNER、SYSTEM、WORLD、UIC、NEWVERSIONのデバイス・パラメータが処理されます。

MOREREADTIME

MOREREADTIME=intexpr を適応 : SOC(ソケット・デバイス)

MOREREADTIMEは、到着パケットをチェックするためにSOCKETデバイスが使用するポーリング間隔(ミリ秒単位)を指定します。

MOREREADTIMEを指定しない場合、データを検出できなかった時、SOCKET READは、200msの長い最初のインターバルを使用してのダイナミックなアプローチを実装しているので、その後、データが到着し始めると、10msにインターバルを短くします。

インターバルが指定される場合、SOCKETデバイスは常に、指定されたインターバルを使用し、そして、動的には調整されません。これはSOCKET READに適用されます。SOCKET READの実装の詳細については、 “ソケット読み取り操作” を参照してください。

SOCKET READ が定義された終了条件のいずれにも従わない場合は、少なくとも1つの文字が続き、新しいパケットがない間隔、または1,048,576バイトを読み取った後に終了します。

MOREREADTIMEの動作を使用する場合は、次の点に注意してください:

  • 通常は、アプリケーションがより大きなチャンクで入力を待機して処理する方が効率的であり、応答性があります。したがって、MOREREADTIME の値を大きくすると、アプリケーションへの入力のチャンクが大きくなる可能性があります。しかし、値が大きいと応答が遅くなることがあります。

  • MOREREADTIMEの短い値は、特に負荷の軽いシステムでは、かなりのCPUサイクルを消費する可能性があります。

  • MORETREADTIMEの最大値は999(基本的に1秒)です。過度のCPUスピンを引き起こすため、MOREREADTIMEを0にけっして設定しないでください。

例:

Use tcpdev:morereadtime=200 

この例では、ソケットデバイス tcpdev のすべてのREADが入力のために200ミリ秒待機する必要があることを指定しています。

NEWVERSION

NEWVERSION は適応 : SD FIFO SOC(LOCAL)

NewVersion デバイスパラメータは、既存のファイルが使用されている時に、それがOPEN時に空であることを保証します。

デフォルトでは、もしファイルの任意のバージョンが存在する場合、OPENは、現在のバージョンにアクセスします。もしファイルのどのバージョンも存在しない場合は、READONLY なしのOPENは、新しいファイルを作成します。

例:

GTM>file1="foo.txt"
GTM>open file1:newversion:recordsize=5000 
GTM>

この例では、RECORDSIZEが5000バイトのfoo.txtという新しいファイルを作成します。

例:

GTM>set delim=$c(13)
GTM>set tcpdev="server$"_$j,timeout=30
GTM>open tcpdev:(LISTEN="local.socket"_":LOCAL":delim=$c(13):attach="server":newversion):timeout:"SOCKET"

この例では、古い local.socket ファイル(存在する場合)を削除し、新しいLISTENING local.socketファイルを作成します。

OCHSET

OCHSET=expr を適応:すべてのデバイス

UTF-8モードでOPENされている出力デバイスの文字エンコーディングを確立します。式の値は、 M, UTF-8, UTF-16, UTF-16LE, UTF-16BE です。Mモードでは、OCHSETは効果がありません。

*CHSET(ICHSET or OCHSET)が指定されていない場合、GT.Mはデバイスからの入力/出力のデフォルト文字セットとしてUTF-8を想定します。

expr が M、UTF-8、UTF-16、UTF-16LE、UTF-16BE以外の値に設定されていると、GT.Mは実行時エラーを生成します。UTF-16、UTF-LE、UTF-16BEは、$Principal と ターミナル・デバイスではサポートされていません。

[注意] 注意

OCHSET は、OPENコマンドのデバイスパラメータであり、USEコマンドのデバイスパラメータではありません。GT.Mはアプリケーションコードが実行される前に$PRINCIPALを暗黙的にオープンしているので、OCHSETは$Principalには適用されません。

例:

GTM>SET file1="mydata.out" 
GTM>SET expr="UTF-16LE" 
GTM>OPEN file1:(ochset=expr) 
GTM>SET DS=$CHAR($$FUNC^%HD("0905"))_$CHAR($$FUNC^%HD("091A"))
GTM>SET DS=DS_$CHAR($$FUNC^%HD("094D"))_$CHAR($$FUNC^%HD("091B"))_$CHAR($$FUNC^%HD("0940"))
GTM>USE file1 WRITE DS,!
GTM>CLOSE file1 

この例では、mydata.out という名前の新しいファイルを開き、デーバナーガリー語の文字をUTF-16LEエンコーディングで書き込みます。

OKEY

IKEY は適応 : SD, PIPE, と FIFO

OKEYでは、デバイスへのWRITEに別のキーを使用できます; たとえば、GT.MプロセスがUNIXパイプの要素である場合などです。IKEYデバイスパラメータの形式は次のとおりです:

OKEY="key_name [IV]"

key_nameは大文字と小文字を区別し、gtmcrypt_configファイルの "files"セクションのキー名と一致する必要があります。オプションのIVは、暗号化と復号化に使用する初期化ベクトルを指定します。

詳細については、OPENまたはUSEのKEYデバイスパラメータの説明を参照してください。

OWNER

OWNER=expr は適応 : SOC(LOCAL) SD FIFO

ファイル所有者のために、UNIXファイル上のアクセス権を指定します。式は、null で、または、読み取り,書き込み,実行アクセスを示す RWX 文字の任意の組み合わせで、評価する文字列です。これらデバイスパラメータのいずれかの1つが、新しいファイルのOPENで現れた時に、明示的に指定されていないすべてのユーザカテゴリは、デフォルトのマスクが与えられます。既存のファイルのOPENにこれらのデバイスパラメータ(OWNER, GROUP, , WORLD)のいずれかが現れると、明示的に指定されていないユーザカテゴリは変更されません。

ファイルのセキュリティを変更するには、OPENを発行するユーザが、所有権を持っている必要があります。

GROUP、SYSTEM、OWNER、またはWORLDのいずれもOPENに指定されていない場合、GT.Mは既存のファイルのパーミッションを変更せず、新しいファイルは標準のUNIXルールを使用して作成されます。

例:

open "test49.txt":(newversion:owner="rw":group="rw":world="rw")

この例では、新しいバージョンの test49.txt を開き、所有者の読み取り書き込みアクセスを行います。

PAD

PAD=expr は適応 : SD FIFO PIPE

文字セットがMでない場合のFIXED形式シーケンシャル・ファイルの場合、マルチバイト文字(CHSETがUTF-8の場合)またはサロゲート・ペア(CHSETがUTF-16の場合)はレコードに収まらないWIDTHまたはRECORDSIZEによって指定された物理量)、WRITEコマンドは、物理レコードを記入するためにPADデバイスパラメーターで指定された値のバイトを使用します。READは、レコードの終わりに見つかるとパッド・バイトを無視します。PAD の値は0〜127の範囲の整数(ASCII文字)で与えられます。PAD は常にバイト値で、デフォルトは $ZCHAR(32) または [SPACE]です。

UTF-8モードでは、WRITE時にGT.MにPAD文字を挿入させる3つのケースがあります。READしているGT.MはPAD文字を取り除こうとします。このストリッピングは、WRITEが発生したときのRECORDSIZEとPADがREADの場合と同じである場合にのみ正しく動作します。WRITEは次の場合にPAD文字を挿入します:

  1. ファイルがクローズされ、最後のレコードがRECORDSIZEより小さい。ファイルが閉じられたときと同じように、レコードはWRITE ! によってパッデングされます(FIXEDの場合)。

  2. RECORDSIZEが満杯になる前に、$XがWIDTHを超えます。

  3. 次の文字は残りのRECORDSIZEに収まりません。

[注意] 注意

すべてのUTF-16文字セットでは、RECORDSIZEは偶数でなければならず、PADバイトは上位バイト0の2バイトを占有します。

例:

GTM>do ^padexample
padexample
 zprint ^padexample
 set a="主要雨在西班牙停留在平原"
 set encoding="UTF-8"
 set filename="bom"_encoding_".txt"
 open filename:(newversion:fixed:record=8:pad=66:chset=encoding)
 use filename
 write a
 close filename
 halt
$ cat bomUTF-8.txt 
主要BB雨在BB西班BB牙停BB留在BB平原
$ od -tcd1 bomUTF-8.txt 
0000000  344  270  273  350  246  201    B    B  351  233  250  345  234  250    B    B
         -28  -72  -69  -24  -90 -127   66   66  -23 -101  -88  -27 -100  -88   66   66
0000020  350  245  277  347  217  255    B    B  347  211  231  345  201  234    B    B
         -24  -91  -65  -25 -113  -83   66   66  -25 -119 -103  -27 -127 -100   66   66
0000040  347  225  231  345  234  250    B    B  345  271  263  345  216  237
         -25 -107 -103  -27 -100  -88   66   66  -27  -71  -77  -27 -114  -97   32   32

この例では、ローカル変数 a は 3バイト文字の文字列に設定されています。PAD=66は、パディングバイト値を$CHAR(66) に設定します。

PARSE

PARSE は適応 : PIPE

PARSE デバイスパラメーターは、COMMAND値の事前の検証を呼び出します。デバッグ時に、PARSE は COMMAND値のより詳細な診断を提供します。デフォルトでは、OPEN は新しく作成されたプロセスにコマンドを渡す前にコマンドの値を検証しません。PARSEには、シェルのものとは異なる、またはマップされていない、ある種の制限があります。

  • PARSEは、環境変数 PATH および gtm_dist でコマンドを検索し、見つからなければエラーを生成します。

  • PARSE はエイリアスを解決しないため、エラーが発生します。

  • PARSE は $gtm_dist(上記のような)を除く環境変数を解決しないため、エラーが発生します。

  • PARSE は、$PATH や $gtm_dist に同じ名前の(組み込みの)バージョンが含まれていない限り、nohupやcd以外の組込みコマンドを認識しません。nohupの場合、PARSE は $PATHと$gtm_distの次のトークンを探します。PARSEがcdに遭遇すると、次の "|"トークンまで以下のものを無視します(後でCOMMAND値に現れる場合)。

  • PARSEはコマンドのまわりのカッコを拒否します。

  • 次の例は失敗します:

    1. OPEN p:(COMM="(cd; pwd)":WRITEONLY)::"PIPE"

      PARSEエラーなしで指定することができます:

      OPEN p:(COMM="cd; pwd":WRITEONLY)::"pipe"

      この制限には、以下のように文字列に埋め込まれたカッコは含まれません:

    2. OPEN p:(COMM="echo ""(test)""":WRITEONLY)::"pipe"

      または、パラメータを次のようなコマンドに追加します:

      OPEN p:(COMM="tr -d '()'":WRITEONLY)::"PIPE"

    3. PARSEを使用した有効なOPENコマンドの例を次に示します:

      OPEN a:(COMM="tr e j | echoback":STDERR=e:exception="g BADOPEN":PARSE)::"PIPE"
      OPEN a:(SHELL="/usr/local/bin/tcsh":COMM="/bin/cat |& nl":PARSE)::"PIPE"
      OPEN a:(COMM="mupip integ -file mumps.dat":PARSE)::"PIPE"
      OPEN a:(COMM="$gtm_dist/mupip integ -file mumps.dat":PARSE)::"PIPE"
      OPEN a:(COMM="nohup cat":PARSE)::"PIPE" 
READONLY

[NO]READONLY は適応 : SD FIFO PIPE

読み込み専用 (READONLY) または読み書き可能 (NOREADONLY) でデバイスをOPENします。

READONLYパラメーターを使用してシーケンシャルファイルをOPENするには、ファイルがディスク上に存在している必要があります。もしそれがない場合は、GT.Mはランタイム(run-time)エラーを発行します。

GT.Mが、READONLYでOPENされたファイルへのWRITE 命令を遭遇した時、GT.M はランタイムエラーを発行します。

デフォルトでは、OPENは、デバイスまたはファイル NOREADONLY (read-write) にアクセスします。

例:

GTM>set filename="foo.txt"
GTM>open filename:(readonly:recordsize=1048576) 
GTM>

この例では、読み取り権限を持つ foo.txtファイルを開きます。

RECORDSIZE

RECORDSIZE=intexpr は適応 : SD FIFO PIPE

ディスクのデフォルトのレコードサイズを上書きします。

RECORDSIZE は、最初のWIDTHを指定します。RECORDSIZE はUTF-8モードでバイト単位であるため、1バイト文字を想定したWIDTHが生成されるため注意してください。

GT.Mのシーケンシャル・ディスク装置の固定長レコードのRECORDSIZEは、文字数ではなくバイト数で常に指定されます。

すべてのUTF-16 CHSET値について、RECORDSIZE は偶数でなければならず、PAD文字はそれぞれレコード内で2バイトを占有します。

intexpr の最大サイズは1,048,576バイトです。1,048,576より大きい値を指定すると、GT.Mはエラーを生成します。

Unicode の CHSETが使用されている場合、GT.MはRECORDSIZEを[Z][NO]WRAPに応じて出力をラップまたは切り捨てするバイト数として扱います。どのUnicode文字セットでも、GT.MはI / Oが完了していればすでに開いているデバイスのRECORDSIZEを無視します。

キャラクタ・セットがUTF-16、UTF-16LE、UTF-16BEでない場合、デフォルトのRECORDSIZEは 32K-1 バイトです。

キャラクタ・セットがUTF-16、UTF-16LEまたはUTF16-BEの場合、RECORDSIZEは常に2の倍数でなければなりません。これらの文字セットの場合、デフォルトのRECORDIZEは 32K-4 バイトです。

すべてのUTF-16 CHSET値について、RECORDSIZE は偶数でなければならず、PAD文字はそれぞれレコード内で2バイトを占有します。

REWIND

REWIND は 適応 : SD

REWINDは、シーケンシャル・ディスクのファイルポインタを配置します。

$PRINCIPALがREWINDをサポートするデバイスを識別すると、REWINDまたはINREWINDデバイス・パラメータは入力のREWINDを実行し、OUTREWINDは出力のREWINDを実行します。

デフォルトでは、OPENはREWINDではありません。

例:

OPEN "test40.txt":(REWIND:RECORDSIZE=70:NOWRAP) 

この例では、ファイルtest40.txtを開き、ファイルポインタをファイルの先頭に置きます。

SEEK=strexpr

SEEK は 適応 : SD

現在のファイルポインタを strexpr で指定された場所に移動します。strexpr の形式は "[+|-]integer" 形式の文字列で、符号なし(unsigned)の値はファイルの先頭からのオフセットを指定し、明示的に符号付きの値は現在のファイル位置に対するオフセットを指定します。STREAMまたはVARIABLE形式の場合、符号の後の正の intexpr はバイトオフセットですが、FIXED形式の場合はレコードオフセットです。バイト・オーダー・マーカー(BOM)が存在する可能性に対処するために、UTF文字セットで書かれたFIXEDフォーマットファイルのSEEKは、デバイスが作成されてから少なくとも1つ前のREADに従わなければなりません。

[注意] 注意

APPEND が SEEK デバイスパラメータと組み合わされると、デバイスパラメータのオーダーに関係なく、APPENDが最初に実行されます。

例:

GTM>zprint ^seekdemo
seekdemo
  new x,p
  set p="seekfixed"
  open p:(newversion:fixed:recordsize=60)
  use p
  ; create file with 9 records of length 60 bytes each
  ; number from 0 to correspond to record offset
 
  for i=0:1:8 write $justify(i_" - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-|",60)
  use p:rewind
  for i=0:1:8 read x set zk=$zkey use $p write "x= ",x," $zkey= ",zk,!use p
  close p
  write !!,"** OPEN with FIXED:RECORDSIZE=60:seek=""5""",!
  open p:(fixed:recordsize=60:seek="5")
  use p
  read x set ZKEY=$zkey
  ;expect: $ZKEY= 6,0
  use $p write "x= ",x," $zkey= ",ZKEY,!
  write !,"** use with SEEK=""-3""",!
  use p:seek="-3"
  read x set ZKEY=$zkey
  ;expect: $ZKEY= 4,0
  use $p write "x= ",x," $zkey= ",ZKEY,!
  write !,"** use with SEEK=""-1"" to read from the same record. read x#20 to read a partial record",!
  use p:seek="-1"
  read x#20 set ZKEY=$zkey
  ;expect: $ZKEY= 3,20
  use $p write "x= ",x," $zkey= ",ZKEY,!
  write !,"** read x#40 to finish reading the record",!
  use p
  read x#40 set ZKEY=$zkey
  ;expect: $ZKEY= 4,0
  use $p write "x= ",x," $zkey= ",ZKEY,!
  write !,"** CLOSE NODESTROY and reOPEN with no deviceparameters",!
  close p:nodestroy
  open p
  use p
  read x set ZKEY=$zkey
  ;expect: $ZKEY= 5,0
  use $p write "x= ",x," $zkey= ",ZKEY,!
  write !,"** CLOSE NODESTROY and reOPEN with SEEK=""+2""",!
  close p:nodestroy
  open p:seek="+2"
  use p
  read x set ZKEY=$zkey
  ;expect: $ZKEY= 8,0
  use $p write "x= ",x," $zkey= ",ZKEY,!
  write !,"** CLOSE NODESTROY and reOPEN with M:SEEK=""+3""",!
  close p:nodestroy
  open p:(M:seek="+3")
  use p
  read x set ZKEY=$zkey
  ;expect: $ZKEY= 4,0
  use $p write "x= ",x," $zkey= ",ZKEY,!
  write !,"** CLOSE NODESTROY and reOPEN with APPEND:SEEK=""-1""",!
  close p:nodestroy
  open p:(append:seek="-1")
  use p
  read x set ZKEY=$zkey
  ;expect: $ZKEY= 9,0
  use $p write "x= ",x," $zkey= ",ZKEY,!
  close p
  write !,"** CLOSE DESTROY and OPEN non-fixed with SEEK=""120"" and read 60 bytes",!
  open p:seek="120"
  use p
  read x#60 set ZKEY=$zkey
  ;expect: $ZKEY= 180
  use $p write "x= ",x," $zkey= ",ZKEY,!
  write !,"** CLOSE NODESTROY and reOPEN with append:SEEK=""-60"" and read last 60 bytes",!
  close p:nodestroy
  open p:(append:seek="-60")
  use p
  read x#60 set ZKEY=$zkey
  ;expect: $ZKEY= 540
  use $p write "x= ",x," $zkey= ",ZKEY,!
  close p
  quit
 


GTM>do ^seekdemo
x= 0 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 1,0
x= 1 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 2,0
x= 2 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 3,0
x= 3 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 4,0
x= 4 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 5,0
x= 5 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 6,0
x= 6 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 7,0
x= 7 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 8,0
x= 8 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 9,0
** OPEN with FIXED:RECORDSIZE=60:seek="5"
x= 5 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 6,0
** use with SEEK="-3"
x= 3 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 4,0
** use with SEEK="-1" to read from the same record. read x#20 to read a partial record
x= 3 - [-05-|-10-|-15-| $zkey= 3,20
** read x#40 to finish reading the record
x= -20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 4,0
** CLOSE NODESTROY and reOPEN with no deviceparameters
x= 4 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 5,0
** CLOSE NODESTROY and reOPEN with SEEK="+2"
x= 7 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 8,0
** CLOSE NODESTROY and reOPEN with M:SEEK="+3"
x= 3 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 4,0
** CLOSE NODESTROY and reOPEN with APPEND:SEEK="-1"
x= 8 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 9,0
** CLOSE DESTROY and OPEN non-fixed with SEEK="120" and read 60 bytes
x= 2 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 180
** CLOSE NODESTROY and reOPEN with append:SEEK="-60" and read last 60 bytes
x= 8 - [-05-|-10-|-15-|-20-|-25-|-30-|-35-|-40-|-45-|-50-|-55-| $zkey= 540
 
GTM>

このプログラムは、OPENとUSEでSEEKデバイスパラメータを使用し、CLOSE NODESTROYの後に再開する方法を示します。このテストは実行可能なMプログラムとして示され、その後に期待されるテスト出力が続きます。最初に、テストでは、9バイト, 60バイトのレコードで "seekfixed" という名前のファイルが作成され、次にREWINDが作成され、各レコードが読み込まれ、レコード, バイトのペアの後に$ZKEYが続きます。レコードには、SEEKレコードのオフセットと一致するように0から番号が付けられます。テストの後半で同じファイルがOPENED VARIABLEになるので、$ZKEY はその場合バイト・オフセットになります。詳細は、ファイルの出力後に表示されます。

最初のOPENには、オフセット値 5 または 物理レコード6 を記録するためにSEEKするデバイスパラメータを (FIXED:RECORDSIZE=60:SEEK="5") に設定されています。注記:FIXED長レコードとRECORDSIZEは、再OPENで変更されない限り、CLOSE NODESTROYの後も有効です。レコード・オフセット 5 は、$ZKEY=6,0と一緒に読み込まれ、レコード・オフセット 6 の先頭を指しています。次に、SEEK="-3" のUSEを実行して、3つのレコードを読み取り、出力レコードに移動し、$ZKEY=4,0を返します。SEEK="-1" でUSEを実行すると、1つのレコードが処理されたばかりのレコードの先頭に移動します。バイト・オフセットが 20 または $ZKEY=3,20 のレコードオフセット3を示すために、20バイトの部分読み取りが行われます。次に、$ZKEY=4,0 のレコードの処理を終了するために、40バイトの読み取りが行われます。次に、CLOSE NODESTROY と 再OPENのシーケンスが実行されます。最初のCLOSE NODESTROYの後、再OPENはデバイスパラメータなしで実行されます。ファイル位置を含むファイル・デバイスの状態が復元され、レコードオフセット4の読み込みが行われ、$ZKEY=5,0 が出力されます。次に、ファイル・デバイスは、NODESTROYでCLOSEされ、再OPEN はSEEK="+2" の唯一のデバイスパラメータで実行されます。ファイル・デバイスの状態が復元され、相対的なSEEKがファイル内で2レコード後に行われ、レコードオフセット7の後に $ZKEY=8,0 が続きます。次に、ファイル・デバイスはCLOSE NODESTORYになり、再OPENはデバイス・パラメータ (M:SEEK="+3") で実行されます。ファイル・デバイスは、再OPEN上でSEEK以外のデバイスパラメータ(M)が存在するため、ファイルの先頭にOPENされます。その後、ファイルの先頭から 3レコードの相対的なSEEKが実行され、レコードのオフセット3が読み取られ、$ZKEY=4,0 の後に出力されます。ファイル・デバイスは CLOSEされる NODESTORYになり、(APPEND:SEEK="-1") で再OPENされます。APPENDはファイル位置をEOFに移動し、SEEK="-1" はファイル位置をレコード8の先頭に移動します - ファイルの最後のレコードです。APPENDは、デバイスパラメータの順序に関係なく、SEEKの前に適用されることに注意してください。ファイル・デバイスはCLOSEされ(DESTROYはデフォルト)、OPENされ、唯一のデバイスパラメータは SEEK="120" からバイトオフセット120までです。この処理はデフォルトでは NOFIXEDであり、x#60 の読み込みと $ZKEY=180 の出力が行われます。出力はFIXED形式のレコード2と同じです。最後に、ファイル・デバイスはCLOSEされた NODESTROYになり、デバイスパラメータ (APPEND:SEEK="-60") を使用して 再OPENが実行されます。これは、ファイルの位置をEOFに移動し、ファイル内の最終レコードまでの開始オフセットである60バイトに戻ります。x#60 の別の読み込みが行われ、ファイルのサイズである$ZKEY=540 が出力されます。

SHELL(シェル)

SHELL は適応 : PIPE

SHELLデバイスパラメータは、新しいプロセスのシェルを指定します。デフォルトでは、新しく作成されたプロセスは $SHELL環境変数で指定されたシェルを使用します。そうでない場合、環境変数SHELLが未定義の場合、プロセスは/bin/shを使用します。

STDERR

STDERR は適応 : PIPE

STDERR デバイスパラメータは、作成されたプロセスからの stderr 出力が、STDERR値の名前を持つPIPEデバイスに移動することを指定します。このPIPEデバイスは、USE、READおよびCLOSEコマンドの引数としてのみ現れることができる制限されたデバイスとして機能します。これは暗黙的にREADONLYであり、WRITEを試みるとエラーが発生します。以前に明示的なCLOSEコマンドの引数として動作していない場合、PIPEデバイスのCLOSEは暗黙的にSTDERRデバイスを閉じます。

STREAM

[NO]STREAM は適応 : SD FIFO PIPE

WRAPが無効でない限り、STREAMとVARIABLEは意味的に同等です。レコードがWIDTHを超えない限り、それらは同等です。

WRAPが無効でWRITEがWIDTHを超えると、VARIABLE形式ではWIDTHで行が切り捨てられますが、STREAM形式では各WRITE引数が切り捨てまたは行終了記号なしで出力され、合計レコードは任意の長さになります。

STREAMまたはVARIABLEレコード形式ファイルの場合、EOLに遭遇するとREADが戻り、READ #(固定長READ)には #length 文字が読み込まれ、#lengthが指定されていない場合はWIDTH文字のいずれか早い方が読み込まれます。

デフォルトでは、レコードは可変長(VARIABLE length)、NOSTREAMです。

例:

set sd="foo.txt"
open sd:(newversion:stream)
use sd:(width=20:nowrap)
for i=1:1:10 write " the quick brown fox jumped over the lazy dog ",$x,!
use sd:(rewind:width=100)
for i=1:1 use sd read x quit:$zeof use $principal write !,i,?5,x
close sd
quit 

出力の例を次に示します:

1     the quick brown fox jumped over the lazy dog 46
2     the quick brown fox jumped over the lazy dog 46
3     the quick brown fox jumped over the lazy dog 46
4     the quick brown fox jumped over the lazy dog 46
5     the quick brown fox jumped over the lazy dog 46
6     the quick brown fox jumped over the lazy dog 46
7     the quick brown fox jumped over the lazy dog 46
8     the quick brown fox jumped over the lazy dog 46
9     the quick brown fox jumped over the lazy dog 46
10    the quick brown fox jumped over the lazy dog 46

FORMATをVARIABLEに変更すると、同じ例で次の出力が生成されます。

1     the quick brown fox 
2     the quick brown fox 
3     the quick brown fox 
4     the quick brown fox 
5     the quick brown fox 
6     the quick brown fox 
7     the quick brown fox 
8     the quick brown fox 
9     the quick brown fox 
10    the quick brown fox 

VARIABLEのWRITEシーケンスから " ! " フォーマットを削除すると、同じ例で次の出力が生成されます:

1     the quick brown fox 

STREAMでは、同じ例で次の出力が生成されます:

1     the quick brown fox jumped over the lazy dog 46 the quick brown fox jumped over the lazy dog 94 the
2     quick brown fox jumped over the lazy dog 142 the quick brown fox jumped over the lazy dog 191 the q
3    uick brown fox jumped over the lazy dog 240 the quick brown fox jumped over the lazy dog 289 the qui
4    ck brown fox jumped over the lazy dog 338 the quick brown fox jumped over the lazy dog 387 the quick
5     brown fox jumped over the lazy dog 436 the quick brown fox jumped over the lazy dog 485
SYSTEM

SYSTEM=expr は適応 : SOC(LOCAL) SD FIFO

このデバイスパラメータは、OpenVMSアプリケーションとの互換性のためにGT.MのUNIXバージョンで提供されるOWNERの同義語です。

例:

GTM> set perm="rwx" 
GTM>OPEN "test52.txt":(NEWVERSION:SYSTEM="r":GROUP=perm:WORLD=perm) 
GTM>ZSYSTEM "ls -la test52.txt" 

-r--rwxrwx 1 user group 0 Aug 20 18:36 test52.txt
GTM> 

この例では、ファイル test52.txt を開き、所有者の読み取りアクセスを設定しますが、他のユーザーは完全なアクセス権を持ちます。

TRUNCATE

[NO]TRUNCATE は 適応 : SD

現在のファイルポインタを超えてすべてのデータを破棄するファイルを切り捨てます。APPENDも指定されている場合、デバイス・パラメーターのリストでTRUNCATEがAPPENDより前であっても、ファイル・ポインターはファイルの最後に配置されます。

USE $PRINCIPALコマンドのTRUNCATEは、デバイスがアクションをサポートしているときに標準出力デバイスで動作します。

UIC

UIC=expr は適応 : SOC(LOCAL) SD FIFO

ファイルの所有者とグループを指定します。

ファイルへのアクセス権を持つグループを指定します。文字列の形式は "o,g" で、g はUICのグループ部分を表す10進数で、oは所有者部分を表す10進数です。スーパーユーザーは、ファイルUICを任意の値に設定できます。通常のユーザのためのルールの chown() システムコールのマニュアルページは、プラットフォームやシステムの設定によって異なるためmanページを参照してください。

VARIABLE

VARIABLE は適応 :SD FIFO に適応

シーケンシャル・ディスク・ファイルのVARIABLEレコード長フォーマットを指定します。

デフォルトでは、レコードの長さは可変長です。

詳細は、 “STREAM” を参照してください。

WORLD

WORLD=expr は適応 : SOC(LOCAL) SD FIFO

ファイルに指定されたグループに属していない所有者以外のユーザーに対するアクセス許可を指定します。このカテゴリのユーザーは、通常、UNIXでは「other:その他」と呼ばれます。式は、null で、または、読み取り,書き込み,実行アクセスのそれぞれを示す RWX 文字の任意の組み合わせで、評価する文字列です。これらのデバイスパラメータのいずれかが既存のファイルのOPENに現れると、明示的に指定されていないユーザカテゴリは変更されません。

ファイルのセキュリティを変更するには、OPENを発行するユーザが、所有権ownershipを持っている必要があります。

デフォルトでは、OPENとCLOSEは、既存のファイルではパーミッションpermissionsを変更しません。特に指定のない限り、OPENが新しいファイルを作成する時、標準のデフォルト規則を使用してセキュリティを確立します。

例:

OPEN "test51.txt":(NEWVERSION:WORLD="rw")

この例では、ファイル test51.txt を開き、所有者のグループに属していないユーザーに対して読み取り書き込み許可を指定しています。

WRAP

[NO]WRAP は適応 : TRM SD NULL FIFO PIPE SOC

自動記録の終了を有効または無効にします。現在のレコードのサイズ($X)が最大 WIDTHに達し、かつ、デバイスがWRAPを有効になっている時に、ルーチンがWRITE ! コマンドを発行したかのように、GT.Mは新しいレコードを開始します。 読み込み時、WRAPは$ Xが0からWIDTHの範囲内にとどまるかどうかだけを判断します。

WRAPは、SD、NULL、FIFO、PIPE、およびSOCKETに対してデフォルトで有効になっています。TRMの場合、terminfo 変数 auto_right_margin(capname "am") が設定されていると、WRAPはデフォルトで有効になります。

NOWRAPは、レコードを終了する WRITE !を要求するためにGT.Mにさせます。 NOWRAPは、ターミナルとヌルデバイス用のデバイスWIDTHよりも大きくなる$Xを許可します。

ディスク・ファイル上のSTREAMとNOWRAPの組み合わせにより、切り捨てを行わずに任意の長さのデータを書き込むことができます。STREAMのオプションを指定しないと、WRAPオプションは、レコード長がデバイスのWIDTHを超えたときに、実行するアクションを決定します。NOWRAPはGT.Mにレコードを切り捨て、WRAPではGT.MにFIXED形式以外の書式制御文字を挿入させます。

注記: $PRINCIPAL(プロセス起動時)としてオープンされたFIFO、SD、SOCKETデバイスは、デフォルトでNOWRAP、SDおよびFIFOデバイスの場合、STREAMにデフォルト設定されています。

WRITEONLY

[NO]WRITEONLY は適応 : PIPE

WRITEONLYデバイスパラメータは、PIPEがその出力を作成されたプロセスに送信するためだけに機能するように指定します。このようなPIPEからREADを試みると、エラーが発生します。STDERRとWRITEONLYの両方でPIPEを開くと、まだSTDERRデバイスから読み込むことができます。

ZBFSIZE

ZBFSIZE は適応 : SOC

ソケットからの読み取り時に、GT.Mが使用するバッファを割り当てます。ZBFSIZE デバイスパラメータは、予想される最大メッセージと少なくとも同じくらいの大きさにする必要があります。

デフォルトでは、ZBFSIZEサイズは1024で、可能な最大値は1048576です。

ZDELAY

Z[NO]DELAY は、適応 : SOC(TCP)

SETSOCKOPT システムコールへのTCP_NODELAYオプションを使用しているシステムのTCPスタックによって、データパケットのバッファリングを制御します。この動作は、Nagleアルゴリズムと呼ばれることもあります。デフォルトは ZDELAY です。以前のパケットの受領応答(acknowledgement)が受信するかまたはインターバルをパスするかのどちらかがするまで、これは追加のパケットの送信を遅延させます。もう一方のエンドが応答する前に、いくつかのパケットは、接続の1つの終端から送信された場合、ZNODELAYの設定は、ネットワーク上で送信する追加パケットを犠牲にもかかわらず望ましい。ZNODELAYは完全に綴られる(省略なし)必要があります。

LOCALソケットは、ZDELAYデバイスパラメータを無視します。

例:

open tcpdev:(LISTEN=portno_":TCP":attach="server":zbfsize=2048:zibfsize=1024):timeout:"SOCKET"

この例では、ソケット・デバイス tcpdev を開き、2048バイトのバッファサイズを割り当てます。

ZFF

Z[NO]FF=expr は、適応:SOC

ルーチンがWRITE # を発行する時はいつでも、通常ソケットデバイスに送信するために$CHAR() フォーマットで、expr(式)は文字の文字列を指定します。文字列が指定されない場合、または、ZFF="" の場合、文字は一切送信されません。GT.MでのデフォルトはZNOFFです。

ZIBFSIZE

ZIBFSIZE は、適応:SOC(TCP)

ソケットからの読み取り時に、GT.Mが使用するバッファを割り当てます。ZBFSIZE デバイスパラメータは、予想される最大メッセージと少なくとも同じくらいの大きさにする必要があります。

デフォルトでは、ZBFSIZEサイズは1024で、可能な最大値は1048576です。

LOCALソケットは、ZIBFSIZEデバイスパラメータを無視することに注意してください。

OPEN デバイスパラメータの表

OPEN デバイスパラメータ

OPEN デバイスパラメータ

TRM

SD

FIFO

PIPE

NULL

SOC

TRM: ターミナルとプリンタで有効

SD:シーケンシャルディスクファイルで有効

FIFO:FIFOで有効

NULL:nllデバイスで有効

PIPE:PIPEで有効

SOC:ソケットデバイスで有効

APPEND

 

X

       

ATTACH=expr

         

X

CHSET=encoding

X X X X X X

COMMAND=expr

     

X

   

CONNECT=expr

         

X

[NO]DELIMITER

         

X

[NO]EMPT[ERM]

X

         

EXCEPTION=expr

X

X

X

 

X

X

FIFO

   

X

     

[NO]FIXED

 

X

X

X    

[NO]FOLLOW

 

X

       

GROUP=expr

 

X

X

     

KEY

X

X

X

IKEY

X

X

X

ICHSET=encoding

X

X

X

X

X

X

INDEPENDENT

     

X

   

IOERROR=expr

         

X

[NO]NEWVERSION

 

X

X

     

OCHSET=encoding

X

X

X

X

X

X

OKEY

X

X

X

OWNER=expr

 

X

X

     

PARSE

     

X

   

[NO]READONLY

 

X

X

X    

RECORDSIZE=intexpr

 

X

X

X    

SEEK=strexpr

 

X

       

SHELL=expr

     

X

   

STDERR=expr

     

X

   

[NO]STREAM

 

X

X

X

   

SYSTEM=expr

 

X

X

     

[NO]TRUNCATE

 

X

X

     

UIC=expr

 

X

X

     

VARIABLE

 

X

X X    

WORLD=expr

 

X

X

     

[NO]WRITEONLY

 

X

   

[NO]WRAP

X

X

X

X

X

X

ZBFSIZE

         

X

Z[NO]DELAY

         

X

Z[NO]FF

         

X

ZIBFSIZE

         

X

LISTEN=expr

         

X

Use

USEコマンドは、READ(入力)とWRITE(出力)のために、現在のデバイスを選択します。

USEコマンドのフォーマットは:

U[SE][:tvexpr] expr[:(keyword[=expr][:...])][,...]
  • オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。

  • 必要な式は、現デバイスを作るためのデバイスを指定します。

  • プロセスによって現在OPENされていないデバイスを選択するUSEは、ランタイムエラーが発生します。

  • オプションのキーワードはデバイスの動作を制御するデバイスパラメータを指定します;いくつかのデバイスパラメータは、等号(=)で区切られた引数を取ります。もし唯一デバイスパラメータがある場合は、周りの括弧は省略可能です。

  • 間接指定演算子と1つ以上のUSEの引数リストに評価される原子式(expression atom)は、USEのための正当な引数を構成します。

GT.Mは$IOにすべてのREADとWRITEを命令するので、固有な特殊変数 $IO は、現在のデバイスを識別します。。GT.Mイメージが起動すると、$PRINCIPALは暗黙的にOPENされUSEされます。一旦GT.MイメージがデバイスをUSEすると、$IOは、次のUSEコマンドまで、そのデバイスの名前を保持します。

USEコマンドは、デバイスタイプに適用し適用しないものを無視するデバイスパラメータに従ってデバイスを変更します。デバイスパラメータに対応する同じデバイスを別がUSEするまで、USEデバイスパラメータでセットされた特性は持続します。特性は、SD, FIFO, PIPEを除き、その後のCLOSEと再OPENによって、他のデバイスのUSEを介して持続します。

例:

USE $P:(X=0:Y=$Y-1:NOECHO)

この例では、プリンシパル(主)デバイスをUSEします。もしそのデバイスがターミナルである場合、デバイスパラメータは、エコーをオフにし、前の行の先頭にカーソルを置きます。

USE デバイスパラメータ

ATTACH

ATTACH=expr を適応 : SOC(ソケット)

exprは、ソケットプール内のソケットのハンドルを指定します。ATTACH は socketpool のソケット・コレクションで expr を調べ、見つかったものを現在のSOCKETデバイスに持ち込みます。ATTACH 操作が成功すると、接続されたソケットがそのデバイスの現在のソケットになります。

ATTACH は、USEコマンドの他のデバイスパラメータと互換性がありません。ソケットは、DETACH / ATTACHを使用してあるデバイスから別のデバイスに移動できます。

[注意] 注意

ソケットは、移動中に I[O]CHSETを運びません。このようなソケットは、ATTACH されたデバイスの I[O]CHSETを使用します。まだバッファされた入力がある場合、I[O]CHSETが変更されると、アプリケーションに意図しない結果が生じる可能性があります。GT.Mは、DETACH / ATTACHのために I[O]CHSETの変化を検出(または報告)しません。

ATTACH とOPENの使用については、「OPEN デバイス・パラメータ」セクションの“ATTACH” を参照してください。

CANONICAL

[NO]CANONICAL は適応 : TRM

ICANONターミナル属性によって制御される標準入力を、有効または無効にします。詳細については、ご使用のプラットフォームのマニュアルを参照してください、しかし、一般的には、編集機能や、NL(通常は<LF> )、EOF(通常は^D)、EOL(通常は未定義)によって区切られた行を消去して削除するでしょう。

デフォルトでは、標準入力は有効(enable)です( つまり [NO]CANONICALがデフォルト)。

CENABLE

[NO]CENABLE は適応: TRM

$PRINCIPALで <CTRL-C> を入力することによってダイレクトモードをGT.Mに強制する機能を、有効または無効にします。

CENABLEが設定されている場合、<CTRL-C>はプロセスの実行を中断します。割り込み処理の詳細については、 “割り込み処理” を参照してください。

デフォルトではCENABLEが設定されています。CTRAPに$C(3) が含まれる場合、CENABLEは無効になります。

例:

use $principal:(nocenable:ctrap="":exception="") 
CLEARSCREEN

CLEARSCREEN は適応 : TRM

現在のカーソル位置から画面の一番下までターミナル画面をクリアします。CLEARSCREEN デバイスパラメータは、カーソル位置または$Xと$Y 変数は変更しません。

例:

U $P:(X=0:Y=0:CLEAR)

この例では、VDTの左上にある "ホーム" にカーソルを位置付けて、全体の現在のスクリーン "page" がクリアされます。"

CONNECT

CONNECT=expr を適応 : SOC(ソケット・デバイス)

expr によって提供される情報によって格納されているサーバ間のクライアント接続を有効にします。もし操作が成功した場合、新しいソケットはクライアント接続に割り当てられ、デバイスの現ソケットが作られます。

expr は、プロトコルとプロトコル固有の情報を指定します。現在、GT.M は、TCP / IPとLOCAL(UNIXドメインとも呼ばれます)ソケット・プロトコルをサポートしています。

詳細は、“CONNECT” を参照してください。

[注意] 注意

CONNECTはLISTENと互換性がありません。

CONNECT は USEコマンドで使用できますが、OPENコマンドとは異なり、USEコマンドにタイムアウトを指定する方法はないため、FISではこの方法を使用しないことを推奨します。USEコマンドのCONNECTは、デフォルトのタイムアウト値 0 をとります。

例:

“OPENの参考例” の「CONNECT」の例を参照してください。

CONVERT

[NO]CONVERT は適応 : TRM

READ中にGT.Mが小文字の入力を大文字に変換するのを有効または無効にします。

デフォルトでは、ターミナルデバイスドライバは NOCONVERT で操作します。

例:

use $principal:(convert) 
READ X

この例では、READ X 中に小文字をすべて大文字に変換します。

CTRAP

CTRAP=expr は TRM に適応されます

現デバイス用のトラップ文字として、式で<CTRL>文字を確立します。GT.Mがデバイスからの入力にトラップ文字を受け取ると、GT.Mは実行時の例外を発行します。デバイスは現デバイスである必要はありません、それは$IOです。

<CTRL>文字は 0から31のASCIIです。

例えば、コマンド U $P:CTRAP=$C(26,30,7,19) は ASCII 文字の<SUB>, <RS>, <BEL> , <DC3> のためにトラップを設定します。

CTRAPを指定すると、完全に以前のCTRAPリストを置き換えます。null 文字 ("") をCTRAPに設定することは、文字のトラップを無効にします。

CTRAPで有効にするトラップ文字は、次のいずれかのアクションを生成します:

  • もし EXCEPTION デバイスパラメータがデバイスに対して発行されている場合、プロセスは、EXCEPTION 引数を実行します。

  • そうでなければ、もし $ETRAPが空の文字列でない場合、$ETRAPを実行します。

  • そうでなければ、もし$ZTRAPが空の文字列でない場合、プロセスは$ZTRAPを実行します。

  • そうでなければ、GT.M イメージは終了します。

エラー処理の詳細については、 第13章: “エラー処理 を参照してください。

CTRAPが<CTRL-C>を含んでいる時 、[NO]CENABLE は効果がありません。CTRAPping <CTRL-C> もまたCENABLEよりも優先されます。

DELIMITER

[NO]DELIMITER は適応 : SOC(ソケットデバイス)

DELIMITER は、現在のソケットで使用される区切り文字のリストを確立または置き換えます。デフォルトは NODELIMITER です。

expr は、次の形式の文字列でなければなりません。

  1. ':' は、区切り文字で分離するために使用されます(それは、区切り文字による区切り文字です)。

  2. '/' は、エスケープ文字として提供します。

[注意] 注意

expr "ab:/:://:bc" は、"ab", ":", "/", "bc" から成る4つの区切り文字として解釈されます。一つのソケットには、0から64までの区切り文字を持つことができ、それぞれの区切り文字は、1〜64文字を含めることができます。

例:

"Socket (server.m)" の参考例を参照してください。

DETACH

DETACH=expr は適応: SOC(ソケットデバイス)

そのソケットの既存の接続に影響を与えずに、現ソケットデバイスから expr で識別されるソケットを削除します。削除されたソケットは SocketPool に配置され、別のソケットデバイスに結合できます。もし削除されるソケットが現在のソケットの場合は、GT.Mは、次の処理を行います。

  • 削除されたソケットより以前にATTACHされたソケットは、もしその一つが存在する場合、現在行われています。

  • 削除されたソケットの後にATTACHされたソケットは、もし削除された一つが最初のソケットであった場合、現在行われています。

  • 削除されたソケットが現在のソケットデバイスで唯一1つだけだった場合、$PRINCIPALは、現デバイス($IO)に行われます。

[注意] 注意

ソケットは、DETACH / ATTACHを使用してあるデバイスから別のデバイスに移動できます。ソケットは、移動中に I[O]CHSETを運びません。このようなソケットは、ATTACH されたデバイスの I[O]CHSETを使用します。まだバッファされた入力がある場合、I[O]CHSETが変更されると、アプリケーションに意図しない結果が生じる可能性があります。GT.Mは、DETACH / ATTACHのために I[O]CHSETの変化を検出(または報告)しません。

例:

GTM>set tcp="seerv" open tcp:(listen="6321:TCP":attach="serv")::"SOCKET"
GTM>zshow "D"
/dev/pts/9 OPEN TERMINAL NOPAST NOESCA NOREADS TYPE WIDTH=80 LENG=24
seerv OPEN SOCKET TOTAL=1 CURRENT=0
    SOCKET[0]=serv DESC=3 LISTENING PASSIVE NOTRAP PORT=6321
         ZDELAY ZBFSIZE=1024 ZIBFSIZE=87380 NODELIMITER
GTM>set tcp="seerv" o tcp:(listen="6322:TCP":attach="serv2")::"SOCKET"
GTM>zshow "D"
/dev/pts/9 OPEN TERMINAL NOPAST NOESCA NOREADS TYPE WIDTH=80 LENG=24
seerv OPEN SOCKET TOTAL=2 CURRENT=1
    SOCKET[0]=serv DESC=3 LISTENING PASSIVE NOTRAP PORT=6321
         ZDELAY ZBFSIZE=1024 ZIBFSIZE=87380 NODELIMITER
    SOCKET[1]=serv2 DESC=4 LISTENING PASSIVE NOTRAP PORT=6322
         ZDELAY ZBFSIZE=1024 ZIBFSIZE=87380 NODELIMITER

この時点で、ソケットデバイス "seerv" には2つのソケットが関連付けられています。

次のコマンドは、 "serv" ソケットを "socketpool" デバイスに移動します。

GTM>use tcp:detach="serv"
GTM>use 0 zshow "D"
/dev/pts/9 OPEN TERMINAL NOPAST NOESCA NOREADS TYPE WIDTH=80 LENG=24
seerv OPEN SOCKET TOTAL=1 CURRENT=0
    SOCKET[0]=serv2 DESC=4 LISTENING PASSIVE NOTRAP PORT=6322
         ZDELAY ZBFSIZE=1024 ZIBFSIZE=87380 NODELIMITER
socketpool OPEN SOCKET TOTAL=1 CURRENT=0
    SOCKET[0]=serv DESC=3 LISTENING PASSIVE NOTRAP PORT=6321
         ZDELAY ZBFSIZE=1024 ZIBFSIZE=87380 NODELIMITER

ソケット "serv" が擬似ソケットデバイス "socketpool" にどのように関連付けられているかに注目してください。唯一の目的は、分離したソケットを保持することです。

GTM>set tcp2="s2" o tcp2:::"SOCKET"

これにより、新しいソケットデバイスが作成されます。

GTM>zshow "D"
/dev/pts/9 OPEN TERMINAL NOPAST NOESCA NOREADS TYPE WIDTH=80 LENG=24
 s2 OPEN SOCKET TOTAL=0 CURRENT=0
seerv OPEN SOCKET TOTAL=1 CURRENT=0
    SOCKET[0]=serv2 DESC=4 LISTENING PASSIVE NOTRAP PORT=6322
        ZDELAY ZBFSIZE=1024 ZIBFSIZE=87380 NODELIMITER
socketpool OPEN SOCKET TOTAL=1 CURRENT=0
    SOCKET[0]=serv DESC=3 LISTENING PASSIVE NOTRAP PORT=6321
        ZDELAY ZBFSIZE=1024 ZIBFSIZE=87380 NODELIMITER

次のコマンドは、 "serv" ソケットを "socketpool" から "tcp2" デバイスに移動します。

GTM>use tcp2:attach="serv"
GTM>use 0 zshow "D"
/dev/pts/9 OPEN TERMINAL NOPAST NOESCA NOREADS TYPE WIDTH=80 LENG=24
s2 OPEN SOCKET TOTAL=1 CURRENT=0
   SOCKET[0]=serv DESC=3 LISTENING PASSIVE NOTRAP PORT=6321
       ZDELAY ZBFSIZE=1024 ZIBFSIZE=87380 NODELIMITER
seerv OPEN SOCKET TOTAL=1 CURRENT=0
   SOCKET[0]=serv2 DESC=4 LISTENING PASSIVE NOTRAP PORT=6322
       ZDELAY ZBFSIZE=1024 ZIBFSIZE=87380 NODELIMITER
socketpool OPEN SOCKET TOTAL=0 CURRENT=-1
DOWNSCROLL

DOWNSCROLL は TRM に適応されます

もし $Y=0 ならば、DOWNSCROLLは何もしません。そうでなければ、DOWNSCROLLは、ターミナル画面上で1行カーソルを上へ移動し、$Yを1つデクリメントします。DOWNSCROLLは、列の位置や$Xを変更しません。いくつかのターミナル ハードウェアは、DOWNSCROLL をサポートしないでしょう。

ECHO

[NO]ECHO は適応 : TRM

ターミナル入力のエコーを 有効 または無効にします。ECHOを無効にすると、EDITING機能が無効になり、後で呼び出すために入力が利用できなくなります。

デフォルトは、ターミナル入力は ECHOします。

例:

use $principal:noecho

この例では、ターミナル入力のエコーを無効にします。

EDITING

[NO]EDITING は適応:TRM

$PRINCIPAL デバイスのEDITINGモードを有効にします。EDITINGを有効にすると、GT.Mは左右のカーソル移動キーと現在の入力行内での特定の<CTRL>文字の使用を許可します。上矢印キーまたは下矢印キーを使用して最後の入力行を呼び出すことができます。編集機能は、バックスペース(ASCII 127)が通常は削除される terminfo の消去文字と同じに扱われない点を除いて、「ダイレクトモードでの動作とデバッグ」の章の「行編集」セクションで説明したダイレクト・モード・コマンド入力時と同じです。NOECHOは編集モードを無効にします。

環境変数 gtm_principal_editing を設定して、EDITINGのモードを指定します。たとえば、gtm_principal_editing="EDITING" は、GT.Mの起動時にEDITINGモードを有効にします。INSERTのモードを指定することもできます。たとえば、gtm_principal_editing="NOINSERT:EDITING" となります。両方のモードを指定する場合は、コロン( " : ")で区切り、任意の順序で配置します。

デフォルトでは、編集モードは無効になっています。

EDITINGモードを有効にすると、エスケープ・シーケンスはREADを終了しません。

PASTHRUモードを有効にすると、編集モードに優先します。

ETRTING <CTRL>文字のいずれかがCTRAPリストにある場合、CTRAPが優先されるため、編集機能は使用できません。ただし、EDITING <CTRL>文字はTERMINATORリストよりも優先されます。

[注意] 注意

M READ READは、$X と $Y の値が正しいかどうかによって異なります。アプリケーションがカーソル位置を変更する独自のエスケープシーケンスまたは制御文字を送信する場合は、EDITINGを有効にしてM READを実行して入力中に正しい書式を使用できるようにする前に、$X および $Y を正しく更新する必要があります。

EMPTERM

[NO]EMPT[ERM] を適応 : TRM

空の入力行にある "Erase" 文字を使って、READコマンドまたはREAD # コマンドを終了できます。デフォルトは NOEMPTERMです。 gtm_principal_editing 環境変数は、[NO]EMPTERMの初期設定を指定します。TERM環境変数の現在の値で指定されたTERMINFOは、 "Erase" の文字列を持つcapnames の値 "kbs" および/または "kdch1" を定義します。"kbs" または "kdch1" が複数文字の値である場合は、EMPTERM認識のためにESCAPEまたはEDITのデバイスパラメータも指定する必要があります。

stty によって設定され表示される消去文字も、空の入力行でREADコマンドを終了します。この消去文字は、stty shell コマンドを使用してさまざまな値に設定できます。消去文字の典型的な値は<CTRL-H>と<CTRL-?>です。設定され stty 設定で表示される文字は、ターミナル・エミュレータが送信する文字と一致する必要があります。

環境変数TERMは、ターミナル(またはターミナル・エミュレータ)が送信し、期待するものの両方に一致するterminfoエントリを指定する必要があります。

ERASELINE

ERASELINE は適応 : TRM

物理的なカーソル位置から行の終わりまで現在の行をクリアします。ERASELINEは、物理的なカーソルの位置、または、$Xと$Yには影響しません。

ESCAPE

[NO]ESCAPE は、適応 : TRM

エスケープシーケンスのGT.M処理を有効または無効にします。

ターミナルが有効のESCAPE シーケンス処理がある場合、次のイベントは結果があります。<ESC>や<CSI>がターミナルで入力されるとき、デバイスドライバは有効なANSIエスケープシーケンスとして続くシーケンスを検証し、READを終了し、全体のエスケープシーケンスを含むように$ZBをセットします。READ * の場合、ESCAPEシーケンス処理が有効でエスケープ・イントロデューサが読み込まれると、エスケープ・シーケンス全体が $ZB に返され、最初の文字の ASCII 表現が READ * の引数に返されます。

エスケープ処理が無効になっている場合、<ESC>の場合 READ *x は、xに27を返します。もしエスケープイントロデューサもTERMINATORの場合、$ZBには長さが1の文字列でエスケープイントロデューサの $ASCII() 表現の値があり、そうでない場合は、$ZBは空の文字列を保持します。NOESCAPEを使用した単一文字と短い固定読み取りの場合、エスケープ・シーケンスの残りの文字は、[NO]TYPEAHEADにかかわらず、後続のREADSの入力ストリームに入ります。

(NOESCAPE:TERM=$C(13)) で動作するアプリケーションは、入力ストリームからエスケープ・シーケンスの残りの文字を削除するために連続したREAD *コマンドを提供する必要があります。

デフォルトでは、ESCAPE処理は無効になっています。

例:

use $principal:(noescape:term=$c(13)) 

この例では、エスケープ・シーケンス処理を無効にし、行終端文字として $c(13) を設定しています。

EXCEPTION

EXCEPTION=expr を適応:すべてのデバイス

I/Oデバイスのエラーハンドラを定義します。式は、デバイス用のドライバがエラーを検出した時には、または、GT.Mの転送制御にentryref (入口参照)を検出した時には、現在のgtm_ztrap_formに適切な、GT.MがXECUTEするGT.Mコード(例えば、GOTO ERRFILE)のフラグメントを含む必要があります。

エラー処理の詳細については、 第13章: “エラー処理 を参照してください。

FILTER

[NO]FILTER[=expr] は適応 : TRM SOC NULL

指定されたカーソル移動シーケンスの文字フィルタリングを指定します。フィルタリングは、すべての出力の文字検査による文字を必要とし、I/Oパフォーマンスは低下します。

各FILTER デバイスパラメータは、引数を1つだけ持つことができます。しかし、複数のFILTER デバイスパラメータは、それぞれ異なる引数を持つ、単一のUSEコマンドで表示できます。

式exprの有効な値:

  • [NO]CHARACTERS は、<BS>, <LF>, <CR> , <FF> の文字がM ANSI 標準規格にしたがって$Xと$Y をメンテナンスすることを有効または無効にします。 CHARACTERSは、上記の文字のすべての出力を検査し、それに応じて$Xと$Yを調整するために、デバイスドライバにもたらします。デフォルトでは、GT.Mは、Mフォーマットの制御文字、WRAPの記録、特定のアクションデバイスパラメータのためだけの$Xと$Y上の特別なメンテナンスを行います。

  • UTF-8モードでは、通常のUnicode行のターミネータが認識されます。
  • [NO]ESCAPEは、$Xと$YでANSIエスケープシーケンスの効果を変更します。ESCAPEは、出力をフィルタリングし、ANSIエスケープシーケンスを検索し、$Xと$Yを更新することを防止することをGT.Mにもたらします。デフォルトでは、GT.Mは、エスケープシーケンスの画面出力しません。

デフォルトでは、GT.Mは、出力フィルタリングは実行しません。GT.Mのように、標準で記述された非グラフィック文字に対して$Xをメンテナンスするには、FILTER="CHARACTERS" を有効にする必要があります。出力フィルタリングは、I/O処理ではオーバーヘッドが増えます。

例:

use tcpdev:filter="NOESCAPE" 

この例では、メンテナンス $X と$Y のエスケープ・シーケンスの影響を取り除きます。

FOLLOW

[NO]FOLLOW は適応 : SD

完全なレコードがあるか、または指定されたタイムアウトに達した場合にのみ、READを返すように設定します。EOF(end-of-file)の条件で終了するのではなく、より多くの入力を待機します。

USEコマンドは、デバイスをNOFOLLOWからFOLLOWへ、またはFOLLOWからNOFOLLOWへ切り替えることができます。これは、UNIX の tail -f に似たREADの動作モードを提供します。

HOSTSYNC

[NO]HOSTSYNC は適応 : TRM

入力を抑制しターミナルの差し迫ったバッファオーバーランを防ぐためにホスト側でXON/XOFFの使用を有効または無効にします。このデバイスパラメータは、ハードウェアが遅い時、および/または、処理負荷が高い時に、データ損失を防止するのに役立つ非同期通信回線を介してホストの制御メカニズムを提供します。

デフォルトでは、HOSTSYNC は無効です。

IKEY

IKEY は適応 : SD, PIPE, と FIFO

IKEYでは、デバイスからのREADに別のキーを使用できます; たとえば、GT.MプロセスがUNIXパイプの要素である場合などです。IKEYデバイスパラメータの形式は次のとおりです:

IKEY="key_name [IV]"

key_nameは大文字と小文字を区別し、gtmcrypt_configファイルの "files"セクションのキー名と一致する必要があります。オプションのIVは、暗号化と復号化に使用する初期化ベクトルを指定します。

詳細については、OPENのKEYデバイスパラメータの説明を参照してください。

INREWIND

INREWIND は 適応 : SD

$PRINCIPAL が REWINDをサポートするデバイスを識別すると、入力時にREWINDを実行します。ファイルからリダイレクトされたときに、このデバイスパラメータを$PRINCIPALとともに使用します。詳細は、 “SEEK=strexpr” を参照してください。

INSEEK=strexpr

INREWIND は 適応 : SD

$PRINCIPALがSEEKをサポートするデバイスを識別すると、入力時にSEEKを実行します。ファイルからリダイレクトされたときに、このデバイスパラメータを$PRINCIPALとともに使用します。詳細は、 “SEEK=strexpr” を参照してください。

IOERROR

IOERROR=expr は適応 :SOC(ソケットデバイス)

ソケットデバイスで例外処理を有効にします。exprは、I/Oエラーのトラップモードを指定します。"TRAP" に等しい値は、デバイス上のI/Oエラーがエラー条件を発生させることを指定します。"NOTRAP" と等しい値、または IOERRORが指定されていない場合、デバイスのI / Oエラーがエラー状態を引き起こさないことを示します。

[注意] 注意

GT.Mは、現在、ソケットレベルの代わりにデバイスレベルで例外処理を処理します。

例:

use sock:(ioerror="TRAP":exception="zgoto "_$zlevel_":error") 

この例では、ソケット・デバイス sock の例外処理を有効にし、sock のすべてのI / Oエラーがエラー状態を引き起こすことを指定しています。

KEY

IKEY は適応 : SD, PIPE, と FIFO

暗号化されたデータの読み取りと書き込みに使用するキー・ファイルに関する情報を指定します。KEYデバイスパラメータのシンタックスは次のとおりです:

KEY="key_name [IV]"

key_nameは大文字と小文字を区別し、gtmcrypt_configファイルの "files"セクションのキー名と一致する必要があります。オプションのIVは、暗号化と復号化に使用する初期化ベクトルを指定します。

詳細については、OPENのKEYデバイスパラメータの説明を参照してください。

LENGTH

[Z]LENGTH=intexpr は適応 : TRM SOC SD FIFO PIPE NULL

整数式のI/Oデバイスの仮想ページの長さを設定します。仮想ページの長さは 1,048,576 まで指定できます。ページの長さは、デバイスドライバが自動的に$Yを0へリセットする時点で制御します。

デフォルトでは、ターミナルの場合、GT.Mは、LENGTHの初期値として terminfo 変数行(ターミナル定義またはsttyコマンドからのものかもしれません)を使用します。null デバイスとソケット・デバイスのデフォルトの長さは 66 です。

LENGTH を 0 に設定すると、$Y をゼロにリセットできなくなります。

例:

use sock:(width=80:znoff:zlength=24) 

この例では、ソケット・デバイス sock の仮想ページ長を24に設定します。

LISTEN

LISTEN=expr を適応 : SOC(ソケット・デバイス)

新しいソケットが接続をリッスンするように割り当てられます。もしオペレーションが成功する場合、デバイス用に現在のソケットが作られます。

expr は、プロトコルとプロトコル固有の情報を指定します。現在、GT.M は、TCP / IPとLOCAL(UNIXドメインとも呼ばれます)ソケット・プロトコルをサポートしています。

詳細については、 “LISTEN” を参照してください。

例:

GTM>set tcp="seerv" open tcp:(listen="6321:TCP":attach="serv")::"SOCKET"
GTM>use tcp:listen="6322:TCP"
GTM>use 0 zshow "D"
/dev/pts/9 OPEN TERMINAL NOPAST NOESCA NOREADS TYPE WIDTH=80 LENG=24
seerv OPEN SOCKET TOTAL=2 CURRENT=1
SOCKET[0]=serv DESC=3 LISTENING PASSIVE NOTRAP PORT=6321
     ZDELAY ZBFSIZE=1024 ZIBFSIZE=87380 NODELIMITER
SOCKET[1]=h12185825450 DESC=4 LISTENING PASSIVE NOTRAP PORT=6322
     ZDELAY ZBFSIZE=1024 ZIBFSIZE=87380 NODELIMITER
OKEY

IKEY は適応 : SD, PIPE, と FIFO

OKEYでは、デバイスへのWRITEに別のキーを使用できます; たとえば、GT.MプロセスがUNIXパイプの要素である場合などです。IKEYデバイスパラメータの形式は次のとおりです:

OKEY="key_name [IV]"

key_nameは大文字と小文字を区別し、gtmcrypt_configファイルの "files"セクションのキー名と一致する必要があります。オプションのIVは、暗号化と復号化に使用する初期化ベクトルを指定します。

詳細については、OPENのKEYデバイスパラメータの説明を参照してください。

OUTREWIND

INREWIND は 適応 : SD

$PRINCIPAL が REWINDをサポートするデバイスを識別すると、出力時にREWINDを実行します。ファイルへリダイレクトされたときに、このデバイスパラメータを$PRINCIPALとともに使用します。詳細については、 “REWIND” を参照してください。

OUTSEEK=strexpr

INREWIND は 適応 : SD

$PRINCIPAL が SEEK をサポートするデバイスを識別すると、出力時にSEEKを実行します。ファイルへリダイレクトされたときに、このデバイスパラメータを$PRINCIPALとともに使用します。詳細は、 “SEEK=strexpr” を参照してください。

PASTHRU

[NO]PASTHRU は適応 : TRM

ターミナルのERASE文字の解釈を有効または無効にします。PASTHRUは、GT.Mからアプリケーションコードへの入力ストリームで文字を消去するために、ハンドリングとレスポンスの管理をシフトします。

ダイレクトモードで PASTHRU ターミナルを使用するとややぎこちないので、演習のデバッグではPASTHRUを注意してください。

[NO]TTSYNC は、XON/XOFF処理を制御するために [NO]PASTHRU を使用される必要があります。

デフォルトでは、デバイスドライバは NOPASTHRU を操作します。

PASTHRUはライン・エディト(line editing)よりも優先されます。

READSYNC

[NO]READSYNC は適応 : TRM

READの前の<XON>とREADの後の<XOFF>の自動出力を有効または無効にします。

デフォルトでは、ターミナルドライバは NOREADSYNC を操作します。

REWIND

REWIND は 適応 : SD

REWINDは、ファイル・ポインタをファイルの先頭に置きます。

デフォルトでは、USEは REWINDできません。

$PRINCIPAL のリダイレクト出力のREWINDはOUTREWINDと同じです。

SEEK=strexpr

SEEK は 適応 : SD

現在のファイルポインタを strexpr で指定された場所に移動します。strexpr の形式は "[+|-]integer" 形式の文字列で、符号なし(unsigned)の値はファイルの先頭からのオフセットを指定し、明示的に符号付きの値は現在のファイル位置に対するオフセットを指定します。STREAMまたはVARIABLE形式の場合、符号の後の正の intexpr はバイトオフセットですが、FIXED形式の場合はレコードオフセットです。バイト・オーダー・マーカー(BOM)が存在する可能性に対処するために、UTF文字セットで書かれたFIXEDフォーマットファイルのSEEKは、デバイスが作成されてから少なくとも1つ前のREADに従わなければなりません。

$PRINCIPALのリダイレクト入力のSEEKは、INSEEKと同じです。

SOCKET

SOCKET=expr は適応 : SOC

exprで指定されたハンドルで指定されたソケットをSocketデバイスの現在のソケットにします。指定されたソケットがリスニングソケットである場合、着信接続の要求があるかどうかをチェックし、要求があればそれを受け取り、新しい接続ソケットを作成します。その場合、$KEYは新しいソケットに関する情報を提供します。Socketデバイスに含まれていないソケット・ハンドルを指定すると、エラーが発生します。

[注意] 注意

SOCKET は、DELIMITER だけ互換性があります。

使い方の例については、 “ソケットデバイスの例”のセクション の「socketexamplemulti2.m」を参照してください。

TERMINATOR

[NO]TERMINATOR[=expr] は適応: TRM

256 個のASCII文字のうちどの文字がREADを終了するかを指定してください。例えば、TERMINATOR = $C(0) は <NUL>ターミネータです。

NOESCAPE に効果がある時、TERMINATORは <ESC>や<CSI> がターミネータとして扱われるかどうかを制御しません、しかしながら、ESCAPE処理が有効な時は、全体のエスケープシーケンスはTERMINATOR仕様に関係なくターミネータとして扱われます。

EDITINGが有効になっていると、編集に使用された制御文字は、TERMINATORリストに入っていても、ターミネーターとして扱われません。

制御文字はターミネータとして定義できますが、すべて1文字です。

ターミナルがUTF-8モード(chset=utf8)である場合、GT.Mはターミネータ文字をASCIIとUnicodeで共通の最初の127に制限します。Mモードでは、256文字のいずれかをターミネータとして指定できます。

UTF-8モードでは、CR がターミネータリストにある場合(デフォルトまたは明示的に)、GT.Mは標準のUnicode行ターミネータ方式を維持するために、次のLFを無視します。

NOTERMINATORは、すべてのターミネータを除去します。ターミナルがすべてのターミネータを無効にする時、固定長の READ とREAD *は文字のいくつかの数を受信したときに終了し、時間指定があるREADはタイムアウトで終了しますが、しかし、入力がターミナルリードバッファを溢れる時は、他のREADのみ終了します。

デフォルトでは、ターミナルはターミネータとして<CR>や<ESC>を認識します(すなわち、TERMINATOR=$C(13,27) )。TERMINATOR="" はデフォルトに戻します。UTF-8モードでは、通常のUnicode行ターミネータもデフォルトのターミネータのセットに含まれています。

例:

GTM> USE $P:TERM=$C(26,13,11,7)

この例では、READターミネータとして ASCII文字の<SUB>, <CR>, <VT>, <BEL> が有効になります。

TRUNCATE

[NO]TRUNCATE は 適応 : SD

シーケンシャルファイル内の既存データの上書きを、有効または無効にします。各レコードの位置が先のレコードに依存しているため、WRITEは、ファイル内の後続レコードへ確実に位置する能力を破壊します。したがって、デフォルトでは(NOTRUNCATE)、ファイルポインタがファイルの末尾(end-of-file)に位置されている場合にのみ、GT.M はWRITEを許可します。デバイスがTRUNCATEを有効にする時、ファイルポインタがファイルの終わりにないときに発行されたWRITEは、ファイルポインタからファイルの終わりまでのすべてのデータを破壊することでファイルを切り捨てます。

デフォルトでは、OPENは、シーケンシャルファイルの上書きを許可しないファイル NOTRUNCATEをアクセスします。

このデバイスパラメータは、お使いのプラットフォームによってサポートされていない場合があります。

TTSYNC

[NO]TTSYNC は適応 : TRM

ターミナル出力のXON/XOFFの認識を有効または無効にします。

[注意] 注意

ターミナルは、セットアップモードでまたはスイッチで制御される XON/XOFFのその独自の処理を持ちます。もしアプリケーションが、<CTRL-S> と <CTRL-Q> を認識するプログラムを必要とする場合、ターミナルは再構成が必要になる場合があります。

TYPEAHEAD

[NO]TYPEAHEAD は TRM に適応されます

ターミナルの先行入力バッファリングを有効または無効にします。TYPEAHEAD が無効のときは、まだ読み込まれていない保留中の入力は、各READ引数の入力が読み込まれる前に破棄されます。TYPEAHEADが有効な場合、1つのREAD引数で読み取られなかった入力は、次のREAD引数またはコマンドで使用可能なままです。

先行入力バッファのサイズは、デバイスドライバが将来を見越してREADで格納できるターミナルで入力されたデータ量を制限します。

デフォルトでは、ターミナルデバイスドライバはTYPEAHEADを受け入れます。

UPSCROLL

UPSCROLL は適応 : TRM

ターミナル画面に1行下にカーソルを移動します。もし $Y= LENGTH -1 の場合、UPSCROLLは $Y=0、を設定します。そうでなければ、UPSCROLLは$Yを1ずつ増加します。もしカーソルがページの物理的に一番下にある場合は、1行上に画面がスクロールします。UPSCROLL は、 $Xの列の位置を変更しません。

WIDTH

[Z]WIDTH=intexpr は適応 : TRM SOC NULL SD FIFO PIPE

デバイスの論理レコードのサイズを設定し、WRAPを有効にします。SOC、SD、FIFOのデフォルトのWIDTHは、RECORDSIZEから取得されます。

NOWRAPとWIDTHはお互いに取って代わります。WIDTHとNOWRAPが同じUSEコマンドで一緒に表示されるとき、最後の1つはデバイスの動作をコントロールします。ターミナルの場合は、WIDTH=0 は WIDTH=n:NOWRAPに相当し、n はそのターミナル上で論理レコードのデフォルトの長さです。

ターミナルは、起動したシェル環境からGT.MでそれらデフォルトのWIDTHを継承します。 nullとソケットデバイスのデフォルトのWIDTHは255です。

1MBの文字列をサポートするSDおよびSOCの場合、WIDTHを1,048,576まで指定できます。

UTF-8モードとTRM、SOC、SD、および FIFO出力では、WIDTH デバイスパラメーターは、表示列の単位であり、かつ、出力用に切り捨てとWRAPを制御するために$Xとともに使用され、入力用の $X と $Yが保守されます。

UTF-8モードおよびSOCでは、WIDTH デバイスパラメーターはUnicodeのコード・ポイントの単位であり、かつ、出力用に切り捨てとWRAPを制御するために$Xとともに使用され、入力用の $X と $Yが保守されます。

Mモードでは、WIDTHが0に設定されていると、GT.MはTRMおよびSOCデバイスのデフォルトのWIDTHを使用します。USE x:WIDTH=0 は、USE x:(WIDTH=<device-default>:NOWRAP と等価です。MモードのSOC、SDおよびFIFOデバイスの場合、デバイスのデフォルトはRECORDSIZEです。

GT.Mフォーマットの制御文字、FILTERと、デバイスのWIDTHとWRAPもまた$Xで影響を受けます。

UTF-8モードおよびSOC出力では、WIDTH デバイスパラメーターはUnicodeの文字数を指定します。

WRAP

[NO]WRAP は適応 : TRM SOC NULL SD FIFO PIPE

自動記録の終了を有効または無効にします。現在のレコードのサイズ($X)が最大 WIDTHに達し、かつ、デバイスがWRAPを有効になっている時に、ルーチンがWRITE ! コマンドを発行したかのように、GT.Mは新しいレコードを開始します。 読み込み時、WRAPは$ Xが0からWIDTHの範囲内にとどまるかどうかだけを判断します。

WRAPは、SD、NULL、FIFO、PIPE、およびSOCKETに対してデフォルトで有効になっています。TRMの場合、terminfo 変数 auto_right_margin(capname "am") が設定されていると、WRAPはデフォルトで有効になります。

NOWRAPは、レコードを終了する WRITE !を要求するためにGT.Mにさせます。 NOWRAPは、ターミナルとヌルデバイス用のデバイスWIDTHよりも大きくなる$Xを許可します。

ディスク・ファイル上のSTREAMとNOWRAPの組み合わせにより、切り捨てを行わずに任意の長さのデータを書き込むことができます。STREAMのオプションを指定しないと、WRAPオプションは、レコード長がデバイスのWIDTHを超えたときに、実行するアクションを決定します。NOWRAPはGT.Mにレコードを切り捨て、WRAPではGT.MにFIXED形式以外の書式制御文字を挿入させます。

例:

「OPEN デバイス・パラメータ」セクションの WRAP の参考例を参照してください。

X

X=intexpr は TRM に適応されます

$Xは、ターミナル上の縦の列にカーソルを位置付けます。NOWRAPが有効または intexpr<WIDTH の場合、GT.Mは $X=intexpr をセットします。もしWRAPが有効で intexpr > WIDTH の場合は、GT.Mは $X=intexpr#WIDTH を設定します。 # は GT.M の剰余演算子です。$Xの結果は、実際の物理的な位置を決定します。

ターミナル上で視覚的に何が起きているか、その$Yと$Xの一致を確保するために、GT.M デバイスパラメータとデバイス特性が、常に一致する必要があります。

ターミナルハードウェアは、物理的なカーソルの位置に影響を与えます。X デバイスパラメータは、カーソル行を変更しませんし、$Yを更新しません。

Y

Y=intexpr は適応 : TRM

ターミナル上の水平方向の行にカーソルを位置付けます。

GT.Mは $Y=intexpr#LENGTH を設定します。# はGT.Mモジュロ演算子です。もし intexpr<LENGTH ならば、$Yの結果は物理的な位置を決定します。もし intexpr>LENGTH ならば、カーソルが置かれているので $Y=intexpr#LENGTH となります。 # はGT.M剰余演算子です。ターミナルハードウェアは、物理的なカーソルの位置に影響を与えます。

ターミナル上で視覚的に何が起きているか、その$Yと$Xの一致を確保するために、GT.M デバイスパラメータとデバイス特性が、常に一致する必要があります。たとえば、もしプロセスが 、WRAPへGT.M USEコマンドで以前に設定され、NOWRAPから設定するターミナルのワードラップを変更するサブプロセスを開始するならば、GT.Mはサブプロセスが完了する時、変更を反映しません。したがって、ターミナル上でワードラップは、$Xと$Yの値に反映しません。

Y デバイスパラメータは、カーソル列を変更しませんし、または、$Xを更新しません。

ZBFSIZE

ZBFSIZE は適応 : SOC

ソケットからの読み取り時に、GT.Mが使用するバッファを割り当てます。ZBFSIZE デバイスパラメータは、予想される最大メッセージと少なくとも同じくらいの大きさにする必要があります。

デフォルトでは、ZBFSIZEサイズは1024で、可能な最大値は1048576です。

ZDELAY

Z[NO]DELAY は適応 : SOC

SETSOCKOPT システムコールへのTCP_NODELAYオプションを使用しているシステムのTCPスタックによって、データパケットのバッファリングを制御します。この動作は、Nagleアルゴリズムと呼ばれることもあります。デフォルトは ZDELAY です。以前のパケットの受領応答(acknowledgement)が受信するかまたはインターバルをパスするかのどちらかがするまで、これは追加のパケットの送信を遅延させます。もう一方のエンドが応答する前に、いくつかのパケットは、接続の1つの終端から送信された場合、ZNODELAYの設定は、ネットワーク上で送信する追加パケットを犠牲にもかかわらず望ましい。ZNODELAYは完全に綴られる(省略なし)必要があります。

ZFF

Z[NO]FF=expr は適応 : SOC

ルーチンがWRITE # を発行する時はいつでも、通常ソケットデバイスに送信するために$CHAR() フォーマットで、expr(式)は文字の文字列を指定します。文字列が指定されない場合、または、ZFF="" の場合、文字は一切送信されません。GT.MでのデフォルトはZNOFFです。

例:

u tcpdev:(zwidth=80:zff=$char(13):zlength=24) 

この例では、WRITE # ごとに $char(13) をデバイス tcpdev の現在のソケットに送信します。

ZIBFSIZE

ZIBFSIZE は適応 : SOC

ネットワークソフトウェア(setsockopt SO_RCVBUF)で使用されるバッファサイズを設定します。

デフォルトおよび最大値は、プラットフォームおよび/またはシステムパラメータに依存します。

USE デバイスパラメータの概要

USE デバイスパラメータ

USE デバイスパラメータ

TRM

SD

FIFO

PIPE

NULL

SOC

TRM: ターミナルとプリンタで有効

SD:シーケンシャルファイルで有効

FIFO:FIFOで有効

PIPE:PIPEデバイスで有効

NULL:nllデバイスで有効

SOC:ソケットデバイスで有効

ATTACH

         

X

CANONICAL

X

         

[NO]CENABLE

X

         

CLEARSCREEN

X

         

CONNECT

         

X

[NO]CONVERT

X

         

CTRAP=expr

X

         

[NO]DELIMITER

         

X

DETACH=expr

         

X

DOWNSCROLL

X

         

[NO]EBCDIC

           

[NO]ECHO

X

         

[NO]EMPT[ERM]

X

         

ERASELINE

X

         

ERASETAPE

           

[NO]ESCAPE

X

         

EXCEPTION=expr

X

X

X

 

X

X

[NO]FILTER[=expr]

X

     

X

X

FLUSH

X

         

[NO]FOLLOW

 

X

       

[NO]HOSTSYNC

X

         

KEY

 

X

X

X

   

IKEY

 

X

X

X

   

IOERROR

         

X

INREWIND

 

X

     

INSEEK

 

X

     

[Z]LENGTH=expr

X

X

X

 

X

X

OKEY

 

X

X

X

   

OUTREWIND

 

X

     

OUTSEEK

 

X

     

[NO]PASTHRU

X

         

[NO]RCHK

           

[NO]RETRY

           

REWIND

 

X

       

SEEK=strexpr

 

X

       

SKIPFILE=intexpr

           

SOCKET

         

X

SPACE=intexpr

           

TERMINATOR[=expr]

X

         

[NO]TRUNCATE

 

X

       

[NO]TYPEAHEAD

X

         

UPSCROLL

X

         

[NO]WCHK

           

[Z]WIDTH=intexpr

X

X

X

X

X

X

[NO]WRAP

X

X

X

X

X

X

WRITELB=expr

           

WRITETM

           

X=intexpr

X

     

X

 

Y=intexpr

X

     

X

 

ZBFSIZE

         

X

Z[NO]DELAY

         

X

Z[NO]FF

         

X

ZIBUFSIZE

         

X

LISTEN

         

X

READ

READコマンドは、READの引数として指定されたグローバルまたはローカル変数へ、現在のデバイスからの入力を転送します。利便性のために、READもまた、制限された出力を現デバイスに実行する引数を受け入れます。

READコマンドのフォーマットは:

R[EAD][:tvexpr] glvn|*glvn|glvn#intexpr|strlit|fcc[,...]
  • オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。

  • 添字ありまたは添字なしのグローバルまたはローカル変数名は、入力を格納するために入る変数を指定します; 変数はREADの前に存在する必要はありません; もし変数がREADの前に存在する場合、READはその古い値を置き換えます。

  • 固定形式ファイルの場合、READ Xは常にWIDTH文字を読み取ります。

  • VARIABLEまたはSTREAM形式のファイルの場合、READ X は WIDTH文字まで読み取り、行終端文字またはファイルの終わりが最初に見つかると停止します。

  • アスタリスク(*)を変数名の直前に置くと、READは、入力の1文字を受け取り、変数にその文字のASCIIコードを置きます。

  • シャープ記号(#)と非ゼロの整数式が変数名の直後に続く時、整数式は、読み取り入力として受け入れられる文字の最大数を決定します; GT.Mが整数式で指定された文字数を読み込む時、または、入力ストリームでターミネータを読み込む時、そのどちらが先に発生すると、その読み込みは終了します。

  • プロンプトを発行する簡潔な手段を提供するには、GT.Mは、あたかもWRITEの引数であるかのように、現デバイスへREADの引数に、文字列リテラルと制御文字の書式 (!,?intexpr,#) を送信します。

  • 間接指定演算子と1つ以上のREADの引数リストに評価される原子式(expression atom)は、READのための正当な引数を構成します。

入力文字列の最大長は、デバイスのバッファサイズ制限またはGT.Mの最大文字列サイズ(1,048,576バイト)の小さい方です。もしレコードが最大レコード長よりも長い場合、シーケンシャルを読み込む時に、それを可能にするデバイスに対して、GT.Mはひとつづつレコードを返します。

リテラル文字列がREADへ引数として現れる時、Mは、現デバイスにリテラルを書き込みます。文字列リテラルは、入力を促すことを提供するREADの引数として現れます。GT.Mは、プロンプトとして機能するようにREADで式の引数は許可しません。変数のプロンプトは、WRITEの引数として現れる必要があります。もし変数がREADの引数として現れる場合は、GT.Mは常に、決して出力としてではなく、入力としてそれを解釈します。この機能は、ターミナル I/Oでたいてい使用されます。

READコマンドは、読み取り入力の長さに基づいて、$Xと$Yを調整します。

UTF-8モードで、READコマンドは、入力デバイスの文字エンコーディングとしてOPENデバイスで指定された文字セットの値を使用しています。もし文字セットが "M"または"UTF-8"に指定されている場合、データは変換なしで読み込まれます。もし文字セットが"UTF-16"、"UTF-16LE"、"UTF-16BE"の場合、データは指定されたエンコーディングで読み込み、UTF-8に変換されます。もしREADコマンドが、不正な文字または選択された表現以外の文字を検出した場合、それは実行時エラーが生じます。READコマンドは、固定長でないデバイスではすべてのUnicodeの行ターミネータを認識します。詳細は、"ライン・ターミネーター" のセクションを参照してください。Mモードでは、文字とバイトは1対1の関係にあるため、READを使用して非文字データのビット・ストリームを読み取ることができます。

READ * コマンド

READ * コマンドは、現デバイスから1文字を読み取り、READ * コマンドに指定された変数にその文字の10進数で表現されるASCII コードを返します。READ * は、通信プロトコルで、または、単一の文字の応答が適切にある対話的なプログラムで、最も頻繁に出現します。

UTF-8モードでは、READ * コマンドは、入力のUnicodeで1文字を受け取り、変数にその文字の数値コードポイントの値を入れます。READ * コマンドは、エンコーディングに応じて1〜4バイトを読み取り、文字の数値コードポイント値を返します。ICHSET が "UTF-16"、 "UTF-16LE"または "UTF-16BE"を指定した場合、READ * コマンドはバイト・ペアまたは2バイト・ペアを(サロゲート・ペアの場合)読み込み、数値コードポイント値を返します。ICHSET がMの場合、READ * コマンドは1バイトを読み取り、Mモードと同様に数値のバイト値を返します。

次の例は、値 "A" を読み、変数 X に "A" の10進ASCII 表現を返します。

例:

GTM> READ *X
A
GTM> WRITE X
65

もしGT.Mが文字を読む前にタイムアウトが発生した場合、READ * は変数にマイナス1 (-1) を返します。

GTM>Set filename="mydata.out"; assume that mydata.out contains "主要雨在西班牙停留在平原".
GTM>Open filename:(readonly:ichset="UTF-16LE")
GTM>Use filename
GTM>Read *x
GTM>Close filename
GTM>Write $char(x)
主

この例では、READ * コマンドは、ICHSETで指定されたエンコーディングに従ってmydata.out ファイルの最初の文字を読み取ります。

READ X#maxlen コマンド

READ X#maxlen コマンドは、maxlen が 整数式で、"maxlen" 文字の最大に入力の最大サイズを制限します。

もし READがREAD X#maxlen コマンドに続く場合、READは現在のレコードの残りの部分を返します。

もしmaxlen文字が受信される前にターミネータが届く場合、READ X#maxlen は終了します。

固定長フォーマット・ファイルの場合、WIDTH - $X が lenより大きい場合、READ X#maxlen は maxlen文字を読み取ります。そうでない場合、READは WIDTH - $X の長さの文字を読み取ります。ファイルの終わりに達すると、返される回数は少なくなります。

VARIABLE または STREAM形式のファイルの場合、READ X#maxlen はMIN(maxlen, WIDTH - $X) の長さの文字まで読み取り、行終端文字またはファイルの終わりを検出すると停止します。

Write

WRITEコマンドは、現デバイスへその引数で指定された文字ストリームを転送します。

WRITEコマンドのフォーマットは:

W[RITE][:tvexpr] expr|*intexpr|fcc[,...]
  • オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。

  • 式の引数は、WRITEのテキストを提供します。

  • WRITEの引数が整数式に続いて先頭にアスタリスク(*)が付いている場合、WRITEは、式の整数評価で指定されたASCIIコードに関連付けられている1つの文字を出力します。

  • WRITEは引数として制御文字フォーマットも受け入れます; 制御文字フォーマットは仮想カーソルの位置を変更します: 感嘆符 (!) はデバイス固有のレコードターミネータ(例えばターミナルでの new line)を生じさせ、シャープ記号 (#) はデバイス固有のページターミネータ(例えば、ターミナルのフォームフィード)を生じさせ、そして、もし仮想カーソルが指定された列の"左"にある場合、式が続く疑問符 (?) は、式の整数評価で指定された列に仮想カーソルを移動します。

  • ニーモニックスペースにバインドされているデバイスに指示された時、WRITEもまた、バインディングにキーワードを指定するコントロール ニーモニックを受け入れます - それらは、スラッシュ(/) 接頭辞によって区切られ、オプションで引数の括弧付きリストが続きます。括弧 "()" は引数がない時はオプションですが、単一の引数がある場合であっても現れなければなりません。

  • 間接指定演算子と1つ以上のWRITEの引数リストに評価される原子式(expression atom)は、WRITEのための正当な引数を構成します。

GT.Mは、単一のWRITEの引数の結果として、1,048,576バイト(GT.Mの文字の最大の長さ)まで書き込むことができます。GT.Mは、DELIMITERなしのソケットと有効なSTREAMを持つシーケンシャルデバイスを除いて、すべてのデバイスのための "論理レコード" へ出力をバッファリングします。WRITEコマンドは、現デバイスの現レコードに文字列をアペンドします。GT.Mは、バッファがいっぱいになるまで、GT.Mフォーマットの制御文字を、USEコマンド、CLOSEコマンドで強制的に書き込みするまで、または、ターミナルのためのバッファが古くなるまで、GT.Mは出力デバイスへ書き込みしません。

各デバイスは WIDTH と 仮想 "ページ" を定義するLENGTHを持ちます。LENGTHがページに収まるレコードの数をどのくらいかを決定する時は、デバイスのレコードの最大サイズを決定します。現レコードのサイズ($X) が最大幅に達し、デバイスはWRAPを有効になっている時、GT.Mは新しいレコードを開始します。現在のライン($Y)が最大のLENGTHに達すると、GT.Mは新しいページを開始します。

Unicode CHSETでOPENされたデバイスの場合、WRITE * は intexpr をコードポイントとして使用し、関連するUnicode文字をCHSETで指定されたエンコーディングに書き込みます。MモードでOPENされたデバイスの場合、WRITE * は intexpr をASCII値として受け取り、関連するASCII文字を書き込みます。

WRITEも、仮想カーソルの操作を可能にするいくつかの制御文字フォーマットを持っています。すべてのI/Oデバイスの場合、GT.Mフォーマットの制御文字は、以下のように実行します。

  • WRITE !:$Xをクリアし$Yをインクリメントし、進行中の論理レコードを終了します。"論理レコード" の定義は、デバイスごとに異なりますし、それぞれのデバイスのセクションで説明されています。

  • WRITE #:$Xと$Yをクリアし、進行中の論理レコードを終了します。

  • WRITE ?n:もし n が$Xより大きい場合、デバイスにn-$X 個のスペースを書き込み、n へは $Xをもたらします。もし n が$X以下の場合、?n は 効果ありません。WRAPが有効であって n がラインの LENGTHを超える時には、WRITE ?n は、$Yをインクリメントします。

[注意] 注意

$X が WIDTHより小さければ、WRITE ! は、WIDTH - $X個のスペースを書き込みます。

Unicode CHSETでOPENされたデバイスの場合、WRITE * は intexpr をコードポイントとして使用し、関連するUnicode文字をCHSETで指定されたエンコーディングに書き込みます。MモードでOPENされたデバイスの場合、WRITE * は intexpr をASCII値として受け取り、関連するASCII文字を書き込みます。

UTF-8モードでは、WRITEコマンドで不正な文字が検出されると、VIEW ”BADCHAR" の設定に関係なく実行時エラーが発生します。

詳細については、固有のI/Oデバイスの章を参照してください。

WRITE *

WRITEコマンドの引数が整数式に続いて先頭にアスタリスク(*) で構成するとき、WRITEコマンドは、その整数式のコードポイント値によって表される文字を出力します。

Mの文字セットは、デバイスにOPEN指定すると、WRITE * コマンド転送文字(バイト)は整数式の数値に関連付けられています。文字のUTF-8のデバイスOPENに指定すると、WRITEコマンドは、数値コードポイント値に対応する文字を出力します。"UTF-16LE" または "UTF-16BE"、"UTF-16" 文字セットが指定されている場合は、WRITE * は、その文字セットで指定されたマッピングに文字コードを変換します。

Close

CLOSEコマンドは、プロセスとデバイスの両方へコネクションの切断をします。

CLOSEコマンドのフォーマットは:

C[LOSE][:tvexpr] expr[:(keyword[=expr][:...])][,...]
  • オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。

  • 必要な式は、CLOSEをデバイスに指定します。

  • オプションのキーワードはデバイスの動作を制御するデバイスパラメータを指定します;いくつかのデバイスパラメータは、等号(=)で区切られた引数を取ります; もし唯一1つのキーワードがある場合は、周りの括弧は省略可能です。

  • 間接指定演算子と1つ以上のCLOSEの引数リストに評価される原子式(expression atom)は、CLOSEのための正当な引数を構成します。

CLOSEが発行される時、GT.Mはデバイスへのすべての保留中の出力をフラッシュし、任意のデバイスパラメータを処理します。現在OPENしていないCLOSEしているデバイスは、効果がありません。

部分的なレコードが出力された場合は、WRITE ! は、それを完了するために行われます。このアクションを抑制するには、CLOSEの前に $X をゼロにセットします。

GT.Mが、シーケンシャルファイルを除き、その後の再オープンの場合に使用するために、すべてのデバイスタイプの特性を保持します。もしデバイスがシーケンシャルファイルの場合、デバイスパラメータによって制御される特性は、CLOSEの後に消滅します。

もしCLOSEしようとしているデバイスが$IOの場合、GT.Mは暗黙的に$PRINCIPALをUSEします。GT.M ignores CLOSE $PRINCIPAL.、、GT.Mは、CLOSE $PRINCIPAL を無視します。

例:

CLOSE SD:RENAME=SD_".SAV"

これはデバイスをCLOSEし、もしディスクファイルならば、.SAVタイプを持っているそれをリネームします。

例:

CLOSE SOCKDEV:(SOCKET="LOCALSOCK1":DELETE)

これは、LOCALSOCK1 がリスニングソケットである場合にソケットファイルを削除し、ソケットデバイス上の指定されたソケットのみを閉じます。

CLOSE デバイスパラメータ

DELETE

DELETE は適応 : SD FIFO SOC(LOCAL)

GT.Mが、GT.Mを閉じた後でディスクファイルを削除するように指示します。

DESTROY

[NO]DESTROY は適応 : SD, FIFO, SOC

プロセスがCLOSE後にデバイス特性を保持するかどうかを決定します。デフォルトは、シーケンシャル・ディスク・ファイルとFIFOデバイスではDESTROY、SOCKETデバイスではNODESTROYです。NODESTROYは、M標準で説明したように、最後にCLOSEされたときと同じ特性を持つ以前のCLOSEのデバイスの再OPENを許可しますが、すべてのトラックデバイスはプロセスメモリを使用します。CLOSE でDESTROYされたデバイスは、以前の特性で再OPENすることはできませんが、そのデバイスでプロセスが使用していたメモリを再利用します。[NO]DESTROYは、ソケットデバイス全体ではなく、特定のソケットのCLOSEでは無視されます。

それが作成するプロセスとの通信リンクを形成するため、PIPEデバイスのCLOSEは常にデバイスを削除し、したがって[NO]DESTROYデバイスパラメータを無視します。

EXCEPTION

EXCEPTION=expr を適応:すべてのデバイス

I/Oデバイスのエラーハンドラを定義します。式は、デバイス用のドライバがエラーを検出した時には、または、GT.Mの転送制御にentryref (入口参照)を検出した時には、現在のgtm_ztrap_formに適切な、GT.MがXECUTEするGT.Mコード(例えば、GOTO ERRFILE)のフラグメントを含む必要があります。

式は、デバイス用のドライバがエラーを検出した時には、または、GT.Mの転送制御にentryref (入口参照)を検出した時には、現在のgtm_ztrap_formに適切な、GT.MがXECUTEするGT.Mコード(例えば、GOTO ERRFILE)のフラグメントを含む必要があります。

エラー処理の詳細については、 第13章: “エラー処理 を参照してください。

GROUP

GROUP=expr は適応 : SOC(LOCAL), SD, FIFO

ファイル所有者のグループ内で他のユーザのために、UNIXファイルのアクセス権を指定します。式は、null で、または、読み取り,書き込み,実行アクセスのそれぞれを示す RWX 文字の任意の組み合わせで、評価する文字列です。既存のファイルのCLOSEでこれらのデバイスパラメータ(OWNER, GROUP, WORLD)のいずれかが現れると、明示的に指定されていないユーザカテゴリは変更されません。

ファイルのセキュリティを変更するためには、CLOSEを発行するユーザが、所有権を持っている必要があります。

デフォルトでは、CLOSEは、既存のファイルではパーミッションを変更しません。

OWNER

OWNER=expr は適応 : SOC(LOCAL) SD FIFO

ファイル所有者のために、UNIXファイル上のアクセス権を指定します。式は、null で、または、読み取り,書き込み,実行アクセスのそれぞれを示す RWX 文字の任意の組み合わせで、評価する文字列です。これらデバイスパラメータのいずれかの1つが、既存ファイルのCLOSEで現れた時に、明示的に指定されていないすべてのユーザカテゴリ (GROUP, SYSTEM, WORLD) は変更されず残ります。

ファイルのセキュリティを変更するためには、CLOSEを発行するユーザが、所有権を持っている必要があります。

デフォルトでは、CLOSEは、既存のファイルではパーミッションを変更しません。

RENAME

RENAME=expr は適応 : SD

引数の文字列に含まれる名前にファイル名を変更します。式がパス名の一部を省略するとき、GT.Mは、デバイスの仕様上のセクションで説明したデフォルト設定を適用することにより、完全なパス名を組み立てます。

もしプロセスが十分なアクセス権を持っている場合、ファイル名だけでなく別のディレクトリを指定するには、RENAMEを使用することができます。RENAME は、別のファイルシステムへファイルを移動することはできません。

SOCKET

SOCKET=expr は適応 : SOC

式 expr で指定されたソケットは、クローズされます。以前にOPENされていないソケットを指定すると、エラーが生成されます。もしソケット デバイスパラメータが、ソケットデバイスに対してCLOSEに全く指定されていない場合、ソケットデバイスとそれに関連付けられているすべてのソケットはクローズされます。

SYSTEM

SYSTEM=expr は適応 : SOC(LOCAL) SD FIFO

このデバイスパラメータは、VMSアプリケーションとの互換性のために、UNIXでメンテナンスしている所有者のためにシノニム(同義語)です。

デフォルトでは、CLOSEは、既存のファイルではパーミッションを変更しません。

TIMEOUT

TIMEOUT=expr は適応:PIPE

INDEPENDENT デバイスパラメータでOPENされていないPIPEデバイスのPIPEコプロセッサの終了ステータスのタイムアウト・チェック(秒単位)を実行します。intexpr は、秒単位の時間を指定します。TIMEOUTが指定されていない場合、デフォルトは2秒です。

UIC

UIC=exprgroup number は適応 : SOC(LOCAL) SD FIFO

ファイルへのアクセス権を持つグループを指定します。" g,i " 文字列の形式は、g はUICのグループの一部分を表す10進数で、i は個々の部分を表す10進数値です。

所有者を指定し、ファイルへのアクセスに影響を与えます。式は、新しい所有者の数値IDを評価します。

WORLD

WORLD=expr は適応 : SOC(LOCAL) SD FIFO

UNIXファイルのグループ所有者でないユーザに対してアクセス権を指定します。式は、null で、または、読み取り,書き込み,実行アクセスのそれぞれを示す RWX 文字の任意の組み合わせで、評価する文字列です。これらのデバイスパラメータ (OWNER, GROUP, WORLD) のいずれかが新しいファイルのCLOSEに現れると、明示的に指定されていないユーザカテゴリにはデフォルトの文字列が与えられます。既存のファイルのCLOSEでこれらのデバイスパラメータ(OWNER, GROUP, WORLD)のいずれかが現れると、明示的に指定されていないユーザカテゴリは変更されません。

ファイルのセキュリティを変更するためには、CLOSEを発行するユーザが、 ownership:所有権を持っている必要があります。

デフォルトでは、CLOSEとCLOSEは、既存のファイルではパーミッションpermissionsを変更しません。特に指定のない限り、CLOSEが新しいファイルを作成する時、標準のデフォルト規則を使用してセキュリティを確立します。

ファイルのセキュリティを変更するためには、CLOSEを発行するユーザが、 ownership:所有権を持っている必要があります。

CLOSE デバイスパラメータの表

CLOSE デバイスパラメータ

CLOSE デバイスパラメータ

TRM

SD

FIFO

SOC

SD:シーケンシャルディスクファイルで有効

TRM: ターミナルとプリンタで有効

FIFO:FIFOで有効

NULL:nllデバイスで有効

SOC:ソケットデバイスで有効

DELETE

 

X

X

 

DESTROY

 

X

X

X

ERASETAPE=expr

       

EXCEPTION=expr

X

X

X

X

GROUP=expr

 

X

   

OWNER=expr

 

X

   

RENAME=expr

 

X

   

REWIND

       

SOCKET

     

X

SPACE

       

SYSTEM=expr

 

X

   

UIC=group name

 

X

   

WORLD=expr

 

X

   

[注意] 注意

EXCEPTIONは、NULLに適用される唯一のCLOSE デバイスパラメータなので、NULLデバイスの列が上の表には示されていません。

デバイスパラメータの概要表

次の表は、デバイスパラメータのすべてをまとめたもので、それらを適応するコマンドを表します。

デバイスパラメータの概要

デバイスパラメータ

OPEN

USE

CLOSE

APPEND

X

   

ATTACH

 

X

 

BLOCKSIZE=intexpr

X

   

[NO]CENABLE

 

X

 

CLEARSCREEN

 

X

 

CONNECT

X

X

 

[NO]CONVERT

 

X

 

CTRAP

 

X

 

DELETE

   

X

[NO]DELIMITER

X

X

 

[NO]DESTROY

X

DETACH

 

X

 

DOWNSCROLL

 

X

 

[NO]ECHO

 

X

 

ERASELINE

 

X

 

[NO]ESCAPE

 

X

 

EXCEPTION=expr

X

X

X

[NO]FILTER[=expr]

 

X

 

[NO]FIXED

X

   

FLUSH

 

X

 

GROUP=expr

X

X

X

KEY

X

X

IKEY

X

X

IOERROR=expr

X

X

 

[NO]HOSTSYNC

 

X

 

[Z]LENGTH=intexpr

 

X

 

NEWVERSION

X

   

OKEY

X

X

OWNER=expr

X

X

X

[NO]PASTHRU

 

X

 

[NO]RCHK

X

X

 

[NO]READONLY

X

   

RECORDSIZE=intexpr

X

   

RENAME=expr

   

X

[NO]RETRY

X

X

 

REWIND

X

X

X

SKIPFILE=intexpr

 

X

 

SOCKET

 

X

X

SPACE=intexpr

 

X

X

[NO]STREAM

X

   

SYSTEM=expr

X

 

X

TERMINATOR=expr

 

X

 

TIMEOUT=expr

 

X

[NO]TRUNCATE

X

X

 

[NO]TTSYNC

 

X

 

[NO]TYPEAHEAD

 

X

 

UIC=expr

X

 

X

UPSCROLL

 

X

 

VARIABLE

X

   

[Z]WIDTH=intexpr

 

X

 

WORLD=expr

X

 

X

[Z][NO]WRAP

X

X

 

WRITELB=expr

 

X

 

X=intexpr

 

X

 

Y=intexpr

 

X

 

ZBFSIZE

X

X

 

Z[NO]DELAY

X

X

 

Z[NO]FF

X

X

 

ZIBFSIZE

X

X

 

LISTEN=expr

X

X

 
inserted by FC2 system