我正在尝试通过命名管道进行两个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
来阻止它。
如果我用./app/fortr
或等效的c ++程序替换cat
,那么我按预期得到数字1到10,所以问题似乎与阅读而不是写作有关。但是如果我从普通文件而不是fifo读取,./app/fortr
会给出预期的结果。
我是否希望能够让它发挥作用,它是如此,如何?
更新:
一个更小的例子。如果test包含数字1到10,那么
./app/fortr test
打印数字1到10
但
./app/fortr <( cat test )
打印数字1到6并挂起