5

私はPerlプログラムを使用して、ユーザー入力をFortranプログラムの入力ファイルに適切にフォーマットしています。Fortranプログラムは、出力ファイルとエラーファイルを作成します。Fortranプログラムは、次のようにPerlから呼び出されます。

system "/mydirectories/fortranexecutable $inputfile $outputfile $errorfile";

入力/出力/エラーファイルを実際に作成して、Fortranプログラムが呼び出される前/後にディスクに保存せずに、Fortran実行可能ファイルを呼び出す方法があるかどうか疑問に思っています。私の質問が明確で、あまり明白ではないことを願っています。私はPerlを初めて使用し、これをどこでも検索してみました。よろしくお願いします。

4

2 に答える 2

5

Fortranコードが既存のファイルから順番に読み取り、書き込みを行うが、Perlコードから「リアルタイム」で通信したい場合は、名前付きパイプを使用して回避できます。それらはファイルシステムのエントリとしてまだ存在し、名前を付けられたFortranコードによって通常のファイルとして開くことができますが、それらからの読み取り/書き込みはパイピングのように機能します。

Perlでは、次のようなことを行います(この回答から露骨にコピーされています)。

use File::Temp qw(tempdir);
use File::Spec::Functions qw(catfile);
use POSIX qw(mkfifo);

my $dir = tempdir(CLEANUP=>1);
my $inputfifo = catfile($dir, "input");
mkfifo($inputfifo, 0700) or die "mkfifo($inputfifo) failed: $!";
my $outputfifo = catfile($dir, "output");
mkfifo($outputfifo, 0700) or die "mkfifo(output$fifo) failed: $!";
my $errorfifo = catfile($dir, "error");
mkfifo($errorfifo, 0700) or die "mkfifo($errorfifo) failed: $!";

... open the FIFOs ...

system "/mydirectories/fortranexecutable $inputfifo $outputfifo $errorfifo";

... operate with the FIFOs to communicate with the Fortran code ...

... close FIFOs and remove $dir when finished ...
于 2012-06-14T10:56:44.090 に答える
3

いいえ。Fortranプログラムが$inputfileコマンドライン引数として取り、そこからデータを読み取り、出力するよう$outputfileに記述されて$errorfileいる場合、その結果、それを行う唯一の方法はファイルを使用することです。

標準入力を介して入力データをFortran実行可能ファイルに渡したい場合は、この種の入力に対応するようにFortranソースコードを変更する必要があります。

于 2012-06-13T18:26:46.770 に答える