【发布时间】:2015-11-12 11:47:54
【问题描述】:
我正在尝试使用 Fortran 从命名管道 (FIFO) 中读取数据。读取数据有效,但 Fortran 程序似乎没有注意到另一端的管道何时关闭;读取只是阻塞而不是获取 EOF。
示例程序:
program kitten
character(256) :: buf
open(22, file='test')
do
read(22, *) buf
print*, trim(buf)
end do
end program kitten
现在
$ mkfifo test
$ echo -e '1\n2\n3' >test &
$ ./kitten
程序按预期打印1\n2\n3\n,但随后只是挂起。
相反,如果
,程序会在 EOF 上返回错误-
test是常规文件;或 - 您将
kitten更改为从 STDIN 读取并执行./kitten <test或 -
echo -e '1\n2\n3' | ./kitten;或 - 您用 C 编写了一个等效的
kitten程序。
我使用ifort 15.0.1 和gfortran 4.9.2 对此进行了测试,结果相同。
对于 C,我使用了 gcc 和
#include <stdio.h>
main() {
char buf[256];
FILE *test;
test = fopen("test", "r");
while(fgets(buf, 256, test)) {
printf(buf);
}
}
【问题讨论】:
标签: c io fortran named-pipes