Как перевести команды выполнения из скрипта bash в C? или Как правильно использовать popen () в режиме "W"? - PullRequest
1 голос
/ 09 февраля 2011

Привет всем.Я пытаюсь перевести простой сценарий 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" Вы можете просто рассматривать возвращаемый поток как пользовательский ввод, так что я в замешательстве.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

Возможно, вам нужно добавить несколько строк (\n) в конец этих fprintf строк ...

1 голос
/ 09 февраля 2011

проверили ли вы значение pdb2gmx - правильно ли указан путь, чтобы ваша программа нашла исполняемый файл pdb2gmx?

Возможно, вы захотите вызвать fflush () после fprintf ()

...