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 回答