Привет всем.Я пытаюсь перевести простой сценарий bash, который выполняет программу (называемую pdb2gmx), в команды C, чтобы я мог включить ее в качестве функции в гораздо более крупную программу, но у меня возникли некоторые проблемы с ее выполнением.
Сценарий bash:
#!/bin/sh
/usr/local/gromacs/bin/pdb2gmx -f ${1}.pdb -o ${1}.gro -p ${1}.top << EOF
14
6
Итак, при запуске программы она останавливается и запрашивает ввод пользователя в двух отдельных точках, одна за другой.В сценарии bash простое размещение 14 и 6, кажется, удовлетворяет требованию ввода, но я не могу выполнить тот же трюк в C (кроме того, я не совсем уверен, что EOF там делает, яя просто следую чужому примеру с этим, и сценарий не будет работать без него).
Это то, что я пока имею в C:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE * pdb2gmx;
pdb2gmx = popen( "pdb2gmx -f 1BEO.pdb -o 1BEO.gro -p 1BEO.top" , "w" );
fprintf( pdb2gmx, "EOF" );
fprintf( pdb2gmx, "14" );
fprintf( pdb2gmx, "6" );
pclose( pdb2gmx );
}
, но когда этот кодВыполненный pdb2gmx просто зависает в первой точке, где он нуждается в пользовательском вводе.Так чего мне не хватает?
Мне кажется, что сама программа C также зависает при выполнении строки popen
и никогда не попадает в строки fprintf
, но я подумал, что с режимом popen
, установленным на "w"
Вы можете просто рассматривать возвращаемый поток как пользовательский ввод, так что я в замешательстве.