我的情况如下:我有很多小小的玩具(非常靠近路由器,不完全是,但无论如何都是无关紧要的);他们正在运行一个基于MIPS的
Linux发行版.
为了控制它们,可以在那里telnet(通过串行端口)并向交互式bash类shell发出命令,然后写回一些输出. shell的输入和输出都附加到/ 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中注入一个字符串,从而使shell执行它,捕获shell的输出?
我知道
http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/
即如果我在盒子内部运行GDB(或strace),我知道我可以更改shell的标准输出,但是我无法在那里安装它 – 它太大了,无论如何这种方法看起来太像黑客了.
所以,总结一下:
root如何捕获已经运行的进程的stdout,IN PURE C,没有gdb或strace,无法访问进程的启动方式?
或者 – 几乎相当 – 如何捕获正在写入终端的内容,IN PURE C?
最佳答案 您可能需要查看
reptyr.虽然可能需要一些适应性来适用于您的系统