printf tanto en la ventana de la consola como en el archivo?

Tengo muchos programas C++ que se compilan con Visual Studio 2005. En su mayoría son pequeños módulos de servidor que se ejecutan en las ventanas de la consola. De todos modos, el problema con el que me encuentro es que el texto solo se puede mostrar en la ventana de la consola o en un archivo de registro, pero no en ambos. Cada programa tiene una opción de línea de comandos para especificar el archivo de registro. Aquí está la función a la que llamo para redirigir stdout y stderr a un archivo.

void consoleobj::setstdouterr(const stringobj& printstr)
{
  #if !defined(_WIN32_WCE)
    freopen(printstr.c_str(),"w",stdout);
  #ifdef _MSC_VER 
    ::SetStdHandle(STD_ERROR_HANDLE,GetStdHandle(STD_OUTPUT_HANDLE));  
  #endif
  #endif
  // make log msgs flush to log file(cout does this(on \n?), printf doesn't)
  //now if both redir to same log file, msgs should be in right order
  setvbuf(stdout, NULL, _IONBF, 0);  //no buffering
  setvbuf(stderr, NULL, _IONBF, 0);  //no buffering
}//end method setstdouterr

¿Hay alguna forma de configurar las cosas para que stdout y stderr se escriban en ambas la ventana de la consola y un archivo de registro opcional simultáneamente? He visto código que redirige cout o una función contenedora, pero todas nuestras declaraciones de impresión usan printf y preferiría usar una función similar a la de nuestra biblioteca consoleobj para configurar esto si es posible. ¡Gracias!

preguntado el 09 de marzo de 12 a las 16:03

¿Afecta la regulación de la dup2() trabajar bajo Windows? -

1 Respuestas

En lugar de implementar esta funcionalidad en su código.
Puede utilizar la conocida utilidad tee en Unix
Hay una versión de Windows llamada wtee.exe.

C:\> programm | wtee log.txt

respondido 09 mar '12, 16:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.