Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 从命名管道读取(然后停止)_Fortran_Fortran90_Mkfifo - Fatal编程技术网

Fortran 从命名管道读取(然后停止)

Fortran 从命名管道读取(然后停止),fortran,fortran90,mkfifo,Fortran,Fortran90,Mkfifo,我正试图让两个fortran程序通过命名管道进行通信,但读取程序挂起。我的命令如下所示: > mkfifo /tmp/myfifo > ./app/fortw /tmp/myfifo & > ./app/fortr /tmp/myfifo 其中,fortw打印数字1到10,“fortr”的读取方式如下 open ( unit = nsave, file = outputfile , form = 'formatted', access = 'stream' ) do

我正试图让两个fortran程序通过命名管道进行通信,但读取程序挂起。我的命令如下所示:

> mkfifo /tmp/myfifo
> ./app/fortw /tmp/myfifo &
> ./app/fortr /tmp/myfifo
其中,
fortw
打印数字1到10,“fortr”的读取方式如下

open ( unit = nsave, file = outputfile , form = 'formatted', access = 'stream' )
do while ( .TRUE. )
read ( unit = nsave, fmt = *, end = 10), j
write( 6, *), j
end do

10 continue
它打印数字1-6,然后挂起,因此我必须执行
fg
然后
C^C
来停止它

如果我用<代码> CAT<代码>或等效C++程序代替<代码> /APP/FRTR <代码>,那么我得到的数字是1到10,所以问题似乎是阅读而不是写作。但是如果我从普通文件而不是fifo读取,则

/app/fortr
会给出预期的结果

我是否应该期望能够让它发挥作用,而它是如何实现的

更新:

一个更简单的例子。如果测试包含数字1到10,则

./app/fortr test
打印数字1到10

但是


/app/fortr听起来你需要刷新。在write语句之后尝试刷新(6)。它不是标准的fortran。或者,如果在10之后结束程序,则在终止之前添加close(6)
Flush
is standard Fortran。不幸的是,在读取程序中添加flush(6)和close(6)不会改变结果。读了6个数字后它仍然挂起你使用哪种编译器?什么代码提供读取操作的iostat?我使用的是gfortran。如果我在open命令中添加,
action=“read”
,它现在似乎可以工作了。不过,我对fortran还不熟悉,所以我不知道这有什么帮助,也不知道它是否会继续工作。
 ./app/fortr <( cat test )