写入Fortran和C程序之间的管道时遇到问题

时间:2011-04-05 15:20:42

标签: c windows fortran pipe popen

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

我做错了什么?

编辑:

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

2 个答案:

答案 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,您可能想尝试更新到具有错误修复的版本。