大家好。我正在尝试将一个执行程序(称为 pdb2gmx)的简单 bash 脚本转换为 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
行,但我认为 code>popen
模式设置为 "w"
您可以将返回的流视为用户输入,所以我很困惑。
最佳答案
您可能需要在那些 fprintf
字符串的末尾添加一些换行符 (\n
)...
关于c - 如何将执行命令从 bash 脚本翻译成 C?或者如何在 "W"模式下正确使用 popen()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4949004/