me gustaría:Enviar archivo escribe en el búfer en memoria (fopen algo, pero escribir para amortiguar, no disco)
- redirección de stdout/stderr
- a un búfer en memoria, en lugar que en el disco
- dejando stdout/err funcionando con normalidad
sé cómo utilizar dup2 y freopen a:
- redirección de stdout/err a un archivo de mi elección
- dejando stdout/err funcionando con normalidad
... pero no estoy seguro sobre el tema 2?
MOTIVO: Deseo procesar los datos que van a stdout/err (que provienen del código de un tercero), y luego enviarlos a un servidor web, dejando la aplicación funcionando normalmente.
¿POR QUÉ? ... porque en este momento, cuando se ejecuta nuestra aplicación, vemos que los datos críticos pasan a stdout (y err) de código de terceros, y es un PITA que hace que los usuarios intenten meterse con los archivos de registro locales. Prefiero capturar "los últimos N bytes" en un búfer de anillo, postprocesarlo, y luego, si hay un problema que informa el usuario, enviarlo al servidor.
¿POR QUÉ EVITAR ARCHIVOS? ... porque se trata de un código que debe ejecutarse en iOS y en el escritorio, y "escribir constantemente en un archivo" es algo que quiero evitar, ya que no lo quiero como un archivo de todos modos. Además ... Tendría que preocuparme por mantener ese archivo, recortar proactivamente su tamaño, etc.
Puede usar un tubo. Vea esta solución: http://stackoverflow.com/questions/955962/how-to-buffer-stdout-in-memory-and-write-it-from-a -dedicated-thread – arc
Algunos Unixes o Posix tienen el http : //pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html función (inspirada en GNU). GNU también tiene http://linux.die.net/man/3/open_memstream quizás su IOS tenga estos. –
¿Por qué la gente parece no tener idea de qué es un socket unix? Cree uno, duplique su stdin/stdout de terceros, utilice su código para postprocesarlo, sin disco. – tbert