目的
OPEN ステートメントは既存の外部ファイルを装置に接続するため、
事前結合された外部ファイルを作成し、それを装置に接続するため、あるいは
外部ファイルと装置の間の接続に関する特定の指定子を変更するために使用できます。
構文
>>-OPEN--(--open_list--)---------------------------------------><
|
- open_list
- 装置指定子 (UNIT=u) を必ず 1 つ
含んでいなければならないリストです。このリストには、許可されている他の指定子をそれぞれ 1 つずつ入れることができます。
有効な指定子は次のとおりです。
- [UNIT=] u
- 装置指定子です。u は外部装置指定子で、
その値はアスタリスクであってはなりません。
外部装置識別子は、整数式
(0 から 2,147,483,647 までの範囲の値を持つ) で表される
外部ファイルを示します。
オプションの文字である UNIT= を省略する場合は、open_list の
最初の項目として u を指定しなければなりません。
- ACCESS= char_expr
- ファイルの接続のためのアクセス方式を指定します。
char_expr はスカラー文字式で、式の値は、後続ブランクを
除去すると、SEQUENTIAL、DIRECT、または STREAM のいずれかになります。
デフォルトは SEQUENTIAL です。
ACCESS= が DIRECT の場合は、RECL= を指定しなければなりません。
ACCESS= が STREAM の場合は、RECL= を指定してはなりません。
- ACTION= char_expr
- 認められる入出力操作を指定します。
char_expr はスカラー文字式で、その値は、READ、WRITE、または READWRITE と評価されます。
READ を指定した場合、WRITE および ENDFILE ステートメントはこの接続を参照できません。
WRITE を指定した場合、READ ステートメントは
この接続を参照できません。
READWRITE を指定した場合、どの入出力ステートメントもこの接続を
参照できます。
ACTION= 指定子を省略した場合、デフォルト値は
実際のファイル許可により決まります。
- STATUS= 指定子の値が OLD または UNKNOWN であり、
ファイルがすでに存在している場合、
- READWRITE を指定した状態でファイルがオープンされます。
- 上記の状態が発生しえない場合は、READ を指定した状態でファイルがオープンされます。
- 上記の 2 つの状態がともに発生しえない場合は、WRITE を指定した
状態でファイルがオープンされます。
- STATUS= 指定子の
値が NEW、REPLACE、SCRATCH、また
は UNKNOWN であり、ファイルがまだ存在していない場合:
- READWRITE を指定した状態でファイルがオープンされます。
- 上記の状態が発生しえない場合は、WRITE を指定した状態でファイルがオープンされます。
+----------------------------------IBM 拡張----------------------------------+
- ASYNCH= char_expr
- 明示的に接続された装置が非同期 I/O 用に使用される
かどうかを示す、非同期 I/O 指定子です。
char_expr はスカラー文字式で、
その値は YES または NO のいずれかになります。
YES は、この接続に非同期データ転送ステートメントを許可することを指定します。
NO は、この接続に非同期データ転送ステートメントを許可しないことを指定します。
指定される値は、そのファイルに対して許可される一連の転送方法になります。
この指定子が省略される場合、デフォルト値は NO です。
事前接続された装置は、ASYNCH= に値 NO を指定して接続されています。
暗黙接続される装置の ASYNCH= 値は、装置上で実行される
最初のデータ転送ステートメントによって決まります。
最初のステートメントが非同期データ転送を実行し、暗黙接続されるファイルが
非同期データ転送を許可する場合、ASYNCH= 値は YES になります。
そうでない場合、ASYNCH= 値は NO になります。
+------------------------------End of IBM 拡張-------------------------------+
- BLANK= char_expr
- 形式仕様を使用する場合の、ブランクのデフォルトの解釈を制御します。
char_expr はスカラー文字式で、式の値は、
後続ブランクを除去すると NULL または ZERO のいずれかになります。
BLANK= を指定する場合、FORM='FORMATTED' を指定しなければなりません。
BLANK= を指定しないで、FORM='FORMATTED' を指定した場合、
デフォルトは NULL です。
- DELIM= char_expr
- 区切り文字がある場合に、リスト指示または名前リスト形式設定により
書き込まれた文字定数を区切るために、どのような区切り文字を使用するかを指定します。
char_expr は、スカラー文字式で、
その値は、APOSTROPHE、QUOTE、または NONE と評価されなければなりません。
APOSTROPHE を指定した場合、アポストロフィによって文字定数が区切られます。
文字定数の中のすべての アポストロフィは重ね書きします。
QUOTE を指定した場合、二重引用符によって文字定数が区切られます。
文字定数の中の二重引用符はすべて重ね書きします。
NONE を指定した場合、文字定数は区切られません。
また、文字定数の中のどの文字も重ね書きする必要はありません。
デフォルト値は NONE です。
DELIM= 指定子は定様式入出力用に接続されるファイルにのみ有効です。
ただし、定様式レコードの入力時には無視されます。
- ERR= stmt_label
- エラーが発生した場合に制御が移される同じ有効範囲単位内の
実行可能ステートメントのステートメント・ラベルを指定するエラー指定子です。
ERR= 指定子をコーディングすると、エラー・メッセージは抑制されます。
- FILE= char_expr
-
指定した装置に接続するファイルの名前を指定するファイル指定子です。
+----------------------------------IBM 拡張----------------------------------+
char_expr はスカラー文字式で、この式の後続ブランクを除去した後の値は、
有効な Linux オペレーティング・システム・ファイル名です。 ファイル指定子が必要であるときにそれを省略した場合は、装置は
(デフォルトにより) fort.u に暗黙に接続されます。
ここで、u は先行ゼロを除去して指定した装置です。 暗黙接続されるファイルに代替ファイル名を使用できるように
するには、UNIT_VARS 実行時オプションを使用してください。
- 注:
- Linux オペレーティング・システム・ファイル名が有効であるためには、
各ファイル名の長さが <=255 文字以下で、絶対パス名の合計長が
<=1023 文字以下でなければなりません (ただし、絶対パス名は指定しなくてもかまいません)。
+------------------------------End of IBM 拡張-------------------------------+
- FORM= char_expr
- ファイルを定様式入出力用に接続するのか、
あるいは不定様式入出力用に接続するのかを指定します。
char_expr はスカラー文字式で、式の値は、後続ブランクを
除去すると FORMATTED または UNFORMATTED のいずれかになります。
ファイルを順次アクセス用に接続する場合、デフォルトは FORMATTED です。
ファイルを直接アクセス
またはストリーム・アクセス
で接続する場合、デフォルトは UNFORMATTED です。
- IOMSG= iomsg_variable
- 入出力操作によって戻されるメッセージを指定する入出力状況指定子です。
iomsg_variable は、デフォルトのスカラー文字変数です。これを、使用関連付けされた非ポインター保護変数にすることはできません。
この指定子を含む入出力ステートメントの実行が完了すると、iomsg_variable は以下のように定義されます。
- エラー、ファイルの終わり、またはレコードの終わりという条件が発生した場合、この変数には割り当てによる場合と同様に説明メッセージが割り当てられます。
- そのような条件が発生しなかった場合には、変数の値は変更されません。
- IOSTAT= ios
- 入出力操作の状況を示す入出力状況指定子です。
ios は変数です。この指定子を含む入出力ステートメントの実行が完了すると、ios は
以下の値に定義されます。
- エラーが発生しなかった場合は 0
- エラーが発生した場合は正の値
- PAD= char_expr
- 入力レコードをブランクで埋め込むかどうかを指定します。
char_expr はスカラー文字式で、式の値は、YES または NO の
いずれかに評価される必要があります。YES を指定した場合、入力リストが指定され、かつ、定様式仕様で
レコードに含まれるものよりも多くのデータが必要なときは、定様式入力レコードはブランクで埋め込まれます。NO を指定した場合、入力リストと定様式仕様に対して
レコードに含まれるものよりも多くの文字を与えることはできません。
デフォルト値は YES です。 PAD= 指定子は定様式入出力用に接続されるファイルにのみ有効です。ただし、定様式レコードの出力時には無視されます。
+----------------------------------IBM 拡張----------------------------------+
-qxlf77 コンパイラー・オプションに noblankpad サブオプションを指定し、ファイルが定様式直接入出力用に接続される場合、PAD= 指定子を省略すると、デフォルト値は NO になります。
+------------------------------End of IBM 拡張-------------------------------+
- POSITION= char_expr
- 順次アクセス用またはストリーム・アクセス用に接続されたファイルのファイル位置を指定します。
以前に存在していなかったファイルは、その初期点に位置付けられます。
char_expr はスカラー文字式で、式の値は、後続ブランクを
除去すると、ASIS、REWIND、APPEND のいずれかになります。
REWIND はファイルを初期点に位置付けます。APPEND はファイルをファイル終了レコードの前に位置付けます。
ファイル終了レコードが存在しない場合は、終端点に位置付けます。
ASIS は位置を変更しません。
以下の場合を除き、デフォルト値は ASIS です。
- OPEN ステートメントの後の装置を参照する最初の入出力ステートメント
(INQUIRE ステートメントを除く) が WRITE ステートメントであり、かつ
- STATUS= 指定子
が UNKNOWN で、-qposition コンパイラー・オプション
が appendunknown を指定しているか。
- STATUS= 指定子
が OLD で、-qposition コンパイラー・オプション
が appendold を指定している。
このような場合、WRITE ステートメントが
実行されると、POSITION= 指定子のデフォルト値は APPEND になります。
- RECL= integer_expr
-
直接アクセス用に接続するファイル内の各レコードの長さ、
あるいは順次アクセス用に接続するファイル内のレコードの最大長を指定します。
integer_expr は整数式で、その値は正でなければなりません。
ファイルを直接アクセス用に接続する場合、この指定子を指定しなければなりません。
定様式入出力の場合、長さは文字データを含むすべてのレコードの文字数です。
不定様式入出力の場合、長さはデータの内部形式に必要なバイト数です。
不定様式の順次レコードの長さには、そのデータを
取り囲む 4 バイト・フィールドは考慮しません。
+----------------------------------IBM 拡張----------------------------------+
ファイルを 32 ビットの順次アクセス用に接続するときに RECL= を省略した場合、
その長さは 2**31-1 からレコード・ターミネーターの長さを引いたものです。
32 ビットの定様式順次ファイルの場合、デフォルトのレコードの長さは 2**31-2 です。
32 ビットでアクセス可能な不定様式ファイルの場合、
デフォルトのレコードの長さは 2**31-9 です。
32 ビットでランダムにアクセスできないファイルの場合、デフォルトの長さは 2**15 (32,768) です。
ファイルを 64 ビットの順次アクセス用に接続するときに RECL= を省略した場合、その長さは 2**63-1 からレコード・ターミネーターの長さを引いたものです。
UWIDTH 実行時オプションが 64 に
設定されるとき、64 ビットの定様式順次ファイルの場合、
デフォルトのレコードの長さは、2**63-2 です。
64 ビットの不定様式のファイルの場合、デフォルトのレコードの
長さは 2**63-17 です。
+------------------------------End of IBM 拡張-------------------------------+
- STATUS= char_expr
- ファイルのオープン後の状況を指定します。
char_expr はスカラー文字式で、この式の後続ブランクを
除去した後の値は、以下のうちの 1 つです。
- OLD。既存ファイルを装置に接続します。
OLD を指定する場合、ファイルが存在していなければなりません。
ファイルが存在していない場合は、エラーが発生します。
- NEW。新しいファイルを作成して、装置に接続し、
状況を OLD に変更します。
NEW を指定する場合、ファイルが存在していてはいけません。
ファイルが存在している場合は、エラーが発生します。
- SCRATCH。切り離し時に削除される新しいファイルを作成して接続します。
SCRATCH を名前付きファイルと一緒に指定することはできません
(つまり、FILE=char_expr は省略しなければなりません)。
- REPLACE。
ファイルが存在しない場合、ファイルが作成され、状態は OLD に変化します。
ファイルが存在する場合、ファイルが削除され、同じ名前で新しいファイルが作成され、
状態は OLD に変化します。
- UNKNOWN。既存のファイルを接続するか、
または新しいファイルを作成し、接続します。
ファイルが存在している場合は、OLD として接続されます。
ファイルが存在していない場合は、NEW として接続されます。
デフォルトは UNKNOWN です。
規則
装置が既存のファイルに接続している場合、
その装置に対して OPEN ステートメントを実行することができます。
OPEN ステートメントに FILE= 指定子を
指定しない場合、その装置に接続されるファイルは、
その装置が現在接続されているファイルと同じものになります。
装置に接続されるファイルが、その装置が現在接続されているファイルと
異なる場合は、OPEN ステートメントの実行の直前に、STATUS= 指定子を指定せずに CLOSE ステートメントを
その装置に対して実行した場合と同じ結果になります。
装置に接続されるファイルが、その装置が現在接続されているファイルと同じ
である場合は、現在有効な値と異なる値をとることのできる
指定子は、BLANK=、DELIM=、PAD=、ERR=、および IOSTAT= だけです。
OPEN ステートメントを実行すると、BLANK=、DELIM=、または PAD= 指定子の新しい値が有効になります。
しかし、未指定の指定子およびファイルの位置は何の影響も受けません。
事前に実行された OPEN の ERR= と IOSTAT= 指定子
は、現在の OPEN ステートメントには効果がありません。 STATUS= 指定子を指定する
場合、値 OLD がなければなりません。
現在装置に接続されているファイルと同一のファイルを指定するには、
同一のファイル名を指定するか、FILE= 指定子を省略するか、
または同一のファイルにシンボリック・リンクされているファイルを指定します。
ファイルが装置に接続されている場合、そのファイルおよび異なる
装置に対する OPEN ステートメントは実行されません。
+----------------------------------IBM 拡張----------------------------------+
STATUS= 指定子の値が OLD、
NEW、または REPLACE の場合、FILE= 指定子はオプションです。
事前接続ファイルと標準エラー・デバイス以外のファイルに装置 0 を接続する
ことはできません。しかし、BLANK=、DELIM=、およ
び PAD= 指定子の値を変更することはできます。
+------------------------------End of IBM 拡張-------------------------------+
ERR= と IOSTAT= 指定子が設定されているときにエラーが
検出されると、ERR= 指定子によって指定されたステートメントに対して
転送が行われ、正の整数値が ios に割り当てられます。
+----------------------------------IBM 拡張----------------------------------+
IOSTAT= も ERR= も指定していない場合は、以下のとおりです。
- 重大なエラーが検出されるとプログラムは停止します。
- 回復可能エラーが検出され、
ERR_RECOVERY 実行時オプションが YES に
設定されていると、プログラムは次のステートメントへと処理を継続します。
オプションが NO に設定されていると、プログラムは停止します。
+------------------------------End of IBM 拡張-------------------------------+
例
! Open a new file with name fname
CHARACTER*20 FNAME
FNAME = 'INPUT.DAT'
OPEN(UNIT=8,FILE=FNAME,STATUS='NEW',FORM='FORMATTED')
OPEN (4,FILE="myfile")
OPEN (4,FILE="myfile", PAD="NO") ! Changing PAD= value to NO
! Connects unit 2 to a tape device for unformatted, sequential
! write-only access:
OPEN (2, FILE="/dev/rmt0",ACTION="WRITE",POSITION="REWIND", &
& FORM="UNFORMATTED",ACCESS="SEQUENTIAL",RECL=32767)
関連情報
