Linux: captura la salida de un proceso que ya se está ejecutando (¡en C puro!)

Mi situación es la siguiente: tengo muchos pequeños artilugios (bastante cerca de los enrutadores, no exactamente, pero de todos modos eso es irrelevante); están ejecutando una distribución Linux basada en MIPS.

Para controlarlos, se puede hacer telnet allí (a través del puerto serie) y emitir comandos a un shell interactivo similar a bash que luego vuelve a escribir alguna salida. La entrada y la salida del shell están conectadas a / dev / ttyAS0.

Ahora, me gustaría automatizar todo esto, es decir, escribir un programa que se ejecute dentro del gizmo, sea un pequeño servidor que escuche en algún puerto y que transmita cualquier comando a dicho shell, capture la salida del shell y lo transmita volver a quien haya contactado al servidor.

YO:

1) puede instalar (pequeños, <500KB) programas dentro del gizmo 2) no puede modificar el sistema operativo, los scripts de inicio, el shell, cualquier cosa 3) tiene acceso a la raíz 4) sabe cómo escribir un servidor SOAP 5) sabe cómo obtener un mensaje SOAP, traducirlo a un comando e inyectarlo en / dev / ttyAS0 6) NO SABE cómo capturar la respuesta del shell 7) saber cómo, con la respuesta del shell, traducirlo de nuevo a un mensaje SOAP y responder al investigador original .

Básicamente, el problema es 6): ¿cómo, después de haber inyectado una cadena en / dev / ttyAS0 y haber hecho que el shell la ejecute, capturar la salida del shell?

Estoy consciente de

http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/

es decir, sé que podría cambiar el stdout del shell si tuviera GDB (o strace) ejecutándose dentro de la caja, pero no puedo instalarlo allí; es demasiado grande y, de todos modos, este enfoque se parece demasiado a un truco.

Entonces, resumiendo:

¿Cómo root puede capturar stdout de un proceso que ya se está ejecutando, IN PURE C, sin gdb o strace, sin acceso a la forma en que se inicia el proceso?

O, casi de manera equivalente, ¿cómo capturar lo que se está escribiendo en un terminal, EN PURO C?

Respuestas a la pregunta(2)

Su respuesta a la pregunta