5

我正在寻找 bash shell 的 C 接口。即我想要一组函数,允许我打开会话、执行命令、返回输出(STDOUT、STDERR)并最终关闭 shell。它可以是一个库或基于标准库的 C 源代码。

4

2 回答 2

1

一般的根本问题似乎是如何以编程方式运行交互式终端程序

现在这在我看来需要实际测试,但您大致需要

  1. 使用系统调用创建对应于子进程,和(父进程读写和) 的三个管道;stdinstdoutstderrstdin_pipestdout_pipestderr_pipepipe(2)
  2. fork和 in child close通过调用将标准输入、输出和错误重定向到上述管道的正确端dup2(2)
  3. exec ( execve(2)/ execv(3)) 你的交互式shell;
  4. 开始向其他两个管道写入命令stdin_pipe读取错误和响应。

(如果你不需要区分stdoutstderr你可以通过使用来简化你的生活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()并且systemcall 可以进入一个循环。

于 2012-07-05T11:01:39.133 回答