c - 如何将执行命令从 bash 脚本翻译成 C?或者如何在 "W"模式下正确使用 popen()?

标签 c bash popen execution freeze

大家好。我正在尝试将一个执行程序(称为 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/

相关文章:

bash - 为什么Bash读取命令没有输入就返回?

python - 如何使用 python 子进程模块执行 .profile 中定义的 bash 函数?

c++ - popen() 将执行命令的输出写入 cout

python - Popen 和 stdin 自动输入到 .exe

c - Linux C 程序 - HEX 如何以 0x 为前缀

c - 从 C 数学库的 pow 函数中获取警告

c - 替代获取?

c - K&R C 处理八进制

php - 如何在后台运行 php 脚本而不导致浏览器显示加载动画?

python - 进程间通信 Python