我的情况如下:我有很多小小玩意儿(非常靠近路由器,不完全是这样,但无论如何都是无关紧要的);他们正在运行一个基于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的stdout,但我无法在那里安装它 - 它太大了,无论如何这种方法看起来太像黑客了。
所以,总结一下:
root如何捕获已经运行的进程的stdout,IN PURE C,没有gdb或strace,无法访问进程的启动方式?
或者 - 几乎相当 - 如何捕获正在写入终端的内容,IN PURE C?