我有一个由其他人用Fortran编写的程序,因此从标准输入中读取一些内容然后进行一些计算并输出结果。我想要做的是使用来自另一个程序的不同输入数据多次运行它,由我用C语言编写。为此,我使用popen
:
FILE *pipe = popen(".\\program.exe", "wt");
if (!pipe) {
exit(1);
}
fprintf(pipe, "%d\n", thing1);
fprintf(pipe, "%d\n", thing2);
...
pclose(pipe);
问题是它不能以这种方式工作。它与“program.exe< input.txt”完美配合,但不是这种方式。它读取第一件事然后输出这个愚蠢的错误:“IO-09系统文件错误 - 未知错误”。当然我不知道这意味着什么,因为我从未编写过Fortran。
我做错了什么?
编辑:
不幸的是,我没有该程序的源代码
答案 0 :(得分:1)
它看起来应该有用,不知道为什么它不能。你确定吗
您的Windows计算机上有popen()
吗?我含糊地回忆起它
某些Windows系统无法使用。你可以尝试一下
简单的C程序,看看它是popen()
还是Fortran程序。
作为一种解决方法,您可以将数据写入临时文件
使用system(".\\program.exe < tempfile")
来调用Fortran程序。
是的,这是一个kludge。
答案 1 :(得分:1)
你没有说你正在使用哪个Fortran编译器,但是最近gfortran中的一个长期错误被修复了,从管道读取失败。参见
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47694
因此,如果您正在使用gfortran,您可能想尝试更新到具有错误修复的版本。