Linux:捕获已经运行的进程的输出(纯C!)

我的情况如下:我有很多小的小玩意儿(非常接近路由器,不完全是,但无论如何,这是不相关的); 他们正在运行一个基于MIPS的Linux发行版。

为了控制它们,可以在那里telnet(通过串行端口),然后向交互式的bash-like shell发出命令,然后写回一些输出。 shell的input和输出都连接到/ dev / ttyAS0。

现在,我想自动化所有这一切,即编写一个程序,它将在gizmo中运行,是一个监听某个端口的小型服务器,可以将任何命令传递给所述shell,捕获shell的输出并将其中继回到谁联系到服务器。

一世:

1)可以在Gizmo里面安装(小,<500KB)程序2)不能修改操作系统,启动脚本,shell,任何东西3)有root权限4)知道如何写SOAP服务器5)知道如何获得一个SOAP消息,将它翻译成一个命令并将其注入到/ dev / ttyAS0中6)不知道如何捕获shell的回复7)知道如何获取shell的回复,将其转换回SOAP消息并回复原始查询者。

所以基本上,问题是6):如何在/ dev / ttyAS0中注入一个string,从而使shell执行它,捕获shell的输出?

我知道

Redirecting Output from a Running Process

也就是说,我知道如果我在箱子里面运行GDB(或者strace),我可以改变shell的stdout,但是我不能在那里安装它 – 它太大了,反正这个方法看起来太像一个黑客了。

所以,总结一下:

如何在不使用gdb或strace的情况下捕获已经运行的进程的标准输出(IN PURE C),而无法访问进程的启动方式?

或者 – 几乎等同于 – 如何捕捉正在写入terminal的内容,IN PURE C?

Solutions Collecting From Web of "Linux:捕获已经运行的进程的输出(纯C!)"

你可能想看看reptyr 。 它可能需要一些适应你的系统工作

你有没有试过用kermit脚本驱动串口? 我可能会放弃尝试插入一个更聪明的代理设备,只是尝试和驱动现有的接口。

如果你真的想把它放在设备上,你可以看看屏幕或kermit的来源,以了解它们如何与ttys进行交互。