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

时间:2011-01-20 10:34:40

标签: c linux process stdout capture

我的情况如下:我有很多小小玩意儿(非常靠近路由器,不完全是这样,但无论如何都是无关紧要的);他们正在运行一个基于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?

2 个答案:

答案 0 :(得分:2)

您可能需要查看reptyr。它可能需要一些适应性来为你的系统工作

答案 1 :(得分:0)

您是否尝试使用kermit脚本驱动串口?我可能会放弃尝试在设备上插入一个更聪明的代理,然后尝试驱动现有的界面。

如果您真的想在设备上获取它,您可以查看来源screenkermit,以了解它们与ttys的交互方式。