写入Fortran和C程序之间的管道时出现问题

我有一个由其他人用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。

我究竟做错了什么?

编辑:

不幸的是,我没有该程序的源代码

它看起来应该工作,不知道它为什么不工作。 你确定你的Windows机器上有popen()吗? 我隐约记得它不适用于某些Windows系统。 您可以使用简单的C程序尝试它,看看它是popen()还是Fortran程序。

作为解决方法,您可以将数据写入临时文件,然后使用system(".\\program.exe < tempfile")来调用Fortran程序。 是的,这是一个kludge。

你没有说你正在使用哪个Fortran编译器,但最近gfortran中的一个长期存在的错误被修复了,从管道读取失败。 看到

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47694

因此,如果您正在使用gfortran,您可能希望尝试更新到具有错误修复的版本。