以下の内容について、代理投稿させてください。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
柴田@日水コンと申します。
fjに投稿できる環境にないので,友人から代理投稿してもらっています。
e-mailは使えますので,何か直接コメントがあれば,
siba...@nissuicon.co.jp
にお願いします。
open文などで明示的にファイル名を与えていない入出力装置番号を
FORTRANのプログラムの外部で設定する方法を教えて下さい。
私は,Redhat Linux 5.0で fort77(f2c+gcc2.7.2.3)を使っています。
この環境で,open文で明示的にファイル名を指定しない出力装置に
文字列を書き出すと,"fort.(入出力装置番号)"というファイルができます。
例えば,
% cat devtest.f
write(10, *) 'test'
stop
end
このプログラムを
% fort77 devtest.f
で作り,実行すると,fort.10という,'test'と書き込まれたファイルができます。
fort.10というファイル名はどういう仕組みで名付けられるのでしょうか。
また,環境変数か何かを前もって設定することによって,明示的に指定しない
出力装置番号をファイル名に割り当てることができるでしょうか。
最終的には,以下のような流れのシェルスクリプトを作りたいと思っています。
つまり,VMSのコマンドプロシージャでのASSIGN文の代わりになるものが
ほしいわけです。
#!/bin/bash
(入出力装置番号N番にファイル名を割り当て)
fort77 source.f # <- open文などでファイル名を割り当てないプログラム
a.out
以上,よろしくお願いいたします。
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>> また,環境変数か何かを前もって設定することによって,明示的に指定しない
>> 出力装置番号をファイル名に割り当てることができるでしょうか。
(Linuxのことは良く知らないんですが、
libf2c-0.9.tar.gzというのの中の
libf2c/libI77/open.cというのの中をみると)
f2cのライブラリの一つであるlibI77の中で、
名前を指定していないファイルについては「fort.装置番号」
を使うように固定的に書いてあるので、libI77のソースを書き換えて
コンパイルしなおさないかぎりこれはどうにもならないんじゃ
ないでしょうか。
出力の装置番号があらかじめわかっているなら、「fort.XX」から
望みの出力ファイルにlnコマンドでリンクを張っておくとか、
出力後のファイル名をmvコマンドで変更するとか、
プログラムの先頭に
OPEN(xx,FILE='...')
とかを入れればいいかもしれないですが…
--
新崎@名大人情
ara...@mns2.c.u-tokyo.ac.jp
-------------<ここから>-------------------------------------
柴田@日水コンです。
> f2cのライブラリの一つであるlibI77の中で、
> 名前を指定していないファイルについては「fort.装置番号」
> を使うように固定的に書いてあるので、libI77のソースを書き換えて
> コンパイルしなおさないかぎりこれはどうにもならないんじゃ
> ないでしょうか。
なるほど。わかりました。
> 出力の装置番号があらかじめわかっているなら、「fort.XX」から
> 望みの出力ファイルにlnコマンドでリンクを張っておくとか、
> 出力後のファイル名をmvコマンドで変更するとか、
> プログラムの先頭に
> OPEN(xx,FILE='...')
> とかを入れればいいかもしれないですが…
そうですね。
例えば,装置番号9番をプログラム中ではファイル名を指定せず,かつfoo.datという
ファイルにしたいときは,プログラムの実行前に,
touch foo.dat ; ln -sf foo.dat fort.9
としておけば,9番が入力元・出力先でも両方適用できるので,こうしようと思います。
課題点としては,
1. foo.datが既に存在する場合,タイムスタンプが書き変わってしまう
2. foo.datを2回書かないといけない
がありますが,testコマンドをつかったスクリプトでも書いておこうと思います。
--
柴田研(SHIBATA Gen) <siba...@nissuicon.co.jp>
(株)日水コン 河川事業部技術第2部技術第2課 (大阪支所)
-------------<ここまで>--------------------------------------------------