OPEN 文の ACTION 指定子 (後編)
前編では、ACTION 指定子の指定は省略しない、ということを書きました。 その理由が ACTION 指定子の既定値は処理系依存だから、なのですが、 ではなぜ処理系依存なのか。 少し欲張ったからなのです。
ACTION 指定子は決意表明で、表明したことで起きることはすべて処理系依存です。 一方、処理系はファイルの読み書き属性を(ユーザー権限も含めて)管理しているものです。 なので OPEN 文での ACTION 指定子の指定が、処理系が知る事情も含めて OPEN 文の成否に反映されることも期待されます。
つまり ACTION="READ"
は規格上は WRITE 文に指定しない、
という決意表明ですが、処理系は「入出力誤り条件の集合は、処理系依存とする」
を適用して、OPEN 時に読み出し権限を確認する機会にできます
(ACTION="WRITE"
も同様)。
こちらの見方からすると、ACTION の指定値はファイルの性質によって決まります。
つまり読み出し権限のないファイルには WRITE
しか指定できませんし、
書き込み権限のないファイルは READ
でなければなりません。
どちらの権限もあれば READWRITE
にできます
(あるいはどちらかの権限があれば READWRITE
にできる?)。
どれが適切かは処理系にしかわからないので、
だから ACTION の既定値は処理系依存にせざるをえなかった、ということでしょう。
OPEN 文で ACTION 指定子を省略したとき(しなかったときもですが) INQUIRE 文で ACTION 指定子の値を問い合わせることができます。
INQUIRE(UNIT,ACTION=ACTION)
(指定子右辺の ACTION
は長さ 5 文字以上の基本文字変数)。
また、ファイルの読み書きの権限があるかも INQUIRE 文で問い合わせができることになっています。
INQUIRE(FILE="A",READ=READ,READWRITE=READWRITE,WRITE=WRITE)
(指定子右辺の READ
、READWRITE
、WRITE
はそれぞれ長さ 1 文字以上の文字変数)。
ACTION="READ"
で接続できるファイルは READ
に "YES"
、そうでなければ "NO"
、
不明なら "UNKNOWN"
が返されます。
READWRITE
、WRITE
も同様です。
ちなみに、筆者の使っているある処理系では
書き込み権限のないファイル →
READ
、READWRITE
はYES
、WRITE
はNO
読み出し権限のないファイル →
READ
、READWRITE
はNO
、WRITE
はYES
どちらもないファイル → 3 つとも
NO
どちらもあるファイル → 3 つとも
YES
となりました。
(おわり)