我正在为 bash shell 寻找 C 接口(interface)。 IE。我想要一组函数,允许我打开 session 、执行命令、返回输出(STDOUT、STDERR)并最终关闭 shell。它可以是库或基于标准库的 C 源代码。
最佳答案
一般的根本问题似乎是如何以编程方式运行交互式终端程序。
现在这对我来说需要实际测试,但您大致需要
- 创建三个 pipes对应子进程
stdin
、stdout
、stderr
(父进程写stdin_pipe
,读stdout_pipe
和stderr_pipe
)使用pipe(2)
系统调用; - fork在 child 身上close通过调用
dup2(2)
将标准输入、输出和错误重定向到上述管道的正确末端; - exec (
execve(2)
/execv(3)
) 您的交互式 shell; - 开始writing
stdin_pipe
和 reading 命令来自其他两个管道的错误和响应。
(如果您不需要区分 stdout
和 stderr
,您可以使用 popen(3)
来简化您的生活 - 您可能可以重定向 通过正确选择命令字符串将 stderr
转换为 stdout
。
但是,对于正常工作的解决方案,我相信您可能需要通过调用 pty(7)
来使用伪 ttys ( forkpty(3)
)而不仅仅是 fork 。
考虑到处理伪终端的所有细节开始变得越来越复杂,为什么不搜索应该能够为您完成所有这些的 C 期望库。或者模拟如何 expect或其他一些等效的语言,如 pexpect
实现。实际上 expect
似乎提供了一个名为 libexpect(3)
的 C 库为你这样你就不需要编写 tcl/tk 来对交互进行编程。我个人对图书馆并不熟悉,可能还有其他更好的图书馆。
关于用于交互式 bash 的 C 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11342868/