愛しの Fortran・3改

Fortran について気の向くままに綴ります

INQUIRE 文で接続の性質を調べる

OPEN 文の ACTION 指定子と同様、以下の指定子の値を INQUIRE 文で調べることができます。

  • ACCESS
  • FORM
  • ASYNCHRONOUS

接続されていない装置あるいはファイルでは UNDEFINED が返されます。

ただ、そもそもこれらはプログラマが OPEN 文で指定して、 接続が続く限り変化することはないので、調べる意味があるのか? という疑問は湧きます。

ACCESSFORM に関しては理論上は事前接続の性質を確認する、 という使用法が考えられるかもしれません。 例えば装置 30 に書式なし直接探査ファイルを事前接続している前提のプログラムなら

      INQUIRE(30,ACCESS=ACCESS,FORM=FROM)

として ACCESSFORM を確認して、 想定と違えば警告を出してプログラム終了とか。

ただ、現代的には事前接続など使わず、単に望みの設定で OPEN すれば良さそうです。 そもそも最近の処理系で書式付き順番探査以外のファイルを事前接続できるのか、 やってみようと思い付いたこともないので知りません。

なお、事前接続では ASYNCHRONOUS は必ず NO です。

あとは装置番号だけ受けとって、 どんな接続でも適宜入出力するライブラリルーチン、とかでしょうか。 つまり OPEN する人と読み書きする人が別人の場合。 何のために?

ところで OPEN 文/INQUIRE 文の ACCESS、FORM 指定子は OPEN 文が導入された FORTRAN 77 以来の最初からある機能です (ただし、接続されていない場合の結果は不定から、 Fortran 90 で UNDEFINED を返すように変更された)。 ASYNCHRONOUS も非同期入出力が導入された Fortran 2003 で OPEN 文、INQUIRE 文同時に導入されました。 何かこう、実用的な要請じゃなくて、指定と確認はセット、 みたいな思想によるんでしょうね。