Проблема записи в канал между программами на Fortran и C - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть программа, написанная на Фортране кем-то другим, которая, следовательно, читает несколько вещей из стандартного ввода, а затем выполняет некоторые вычисления и выводит результат.Что я хочу сделать, так это запустить его много раз с другими входными данными из другой программы, написанной мной на 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

Что я делаю не так?

РЕДАКТИРОВАТЬ:

К сожалениюУ меня нет исходного кода этой программы

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Вы не говорите, какой компилятор Фортрана вы используете, но недавно была исправлена ​​давняя ошибка в gfortran, когда чтение из канала не удалось.См.

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

Так что, если вы используете gfortran, вы можете попробовать обновить его до версии с исправлением ошибки.

1 голос
/ 05 апреля 2011

Похоже, это должно работать, не знаю, почему это не так.Вы уверены, что popen() доступен на вашем компьютере с Windows?Я смутно припоминаю, что он недоступен для некоторых систем Windows.Вы можете попробовать это с простой программой на C и посмотреть, является ли она popen() или программой на Фортране.

В качестве обходного пути вы можете записать свои данные во временный файл, а затем использовать system(".\\program.exe < tempfile") для вызова Fortran.программа.Да, это кладжа.

...