我正在寻找 bash shell 的 C 接口。即我想要一组函数,允许我打开会话、执行命令、返回输出(STDOUT、STDERR)并最终关闭 shell。它可以是一个库或基于标准库的 C 源代码。
问问题
2315 次
2 回答
1
一般的根本问题似乎是如何以编程方式运行交互式终端程序。
现在这在我看来需要实际测试,但您大致需要
- 使用系统调用创建对应于子进程,和(父进程读写和) 的三个管道;
stdin
stdout
stderr
stdin_pipe
stdout_pipe
stderr_pipe
pipe(2)
- fork和 in child close通过调用将标准输入、输出和错误重定向到上述管道的正确端
dup2(2)
; - exec (
execve(2)
/execv(3)
) 你的交互式shell; - 开始向其他两个管道写入命令
stdin_pipe
并读取错误和响应。
(如果你不需要区分stdout
和stderr
你可以通过使用来简化你的生活popen(3)
- 你可以通过正确选择命令字符串来重定向stderr
到)。stdout
但是,对于正常工作的解决方案,我相信您可能需要pty(7)
通过调用forkpty(3)
而不是 fork 来使用伪 ttys ()。
随着考虑到处理伪终端的所有细节变得越来越复杂,为什么不搜索应该能够为您完成所有这些工作的 C 期望库。或模拟期望或其他类似语言pexpect
的实现方式。实际上expect
似乎提供了一个libexpect(3)
为您调用的 C 库,因此您无需编写 tcl/tk 来编程交互。我个人对图书馆并不熟悉,可能还有其他更好的图书馆。
于 2012-07-05T11:59:07.933 回答
0
您是否希望实现这样的目标:
#include<stdio.h>
int main()
{
char a[1000];
gets(a);
system(a);
return 0;
}
输出:
./a.out
cat testing.c
#include<stdio.h>
int main()
{
char a[1000];
gets(a);
system(a);
return 0;
}
gets()
并且system
call 可以进入一个循环。
于 2012-07-05T11:01:39.133 回答