Si usted está dispuesto a jugar un juego sucio en la interposición de printf
puede 'robar' hacer algo como su salida:
#include <stdio.h>
#include <stdarg.h>
static char buffer[1024];
static char *next = buffer;
static void funcB(){
printf("%s", "My Name is");
printf("%s", "I like ice cream");
}
static void funcA(){
funcB();
// Do stuff iwth buffer here
fprintf(stderr, "stole: %s\n", buffer);
next=buffer; // reset for later.
}
int main() {
funcA();
}
int printf(const char *fmt, ...) {
va_list argp;
va_start(argp, fmt);
const int ret = vsnprintf(next, sizeof buffer-(next-buffer), fmt, argp);
next += ret;
va_end(argp);
return ret;
}
Se puede usar una bandera para indicar cómo manejar los casos en los que desee printf para trabajar de forma normal. (Por ejemplo, asócielo en fprintf
o use dlsym()
/similar para encontrar la llamada real).
También puede usar realloc
para administrar el tamaño del búfer de manera más sensata.
¿Qué pasaría si 'funcB' no imprimiera su salida, pero en su lugar devuélvala a' funcA'? Difícil de decir a partir de la descripción del resumen que proporcionó, sea más específico. – LihO
* "Esta es una pregunta en C++" * - se parece más a una pregunta en C para mí. Si fuera C++, podría hacer algo como: [this] (http://stackoverflow.com/a/8076948/168175). – Flexo
Parece más una pregunta específica de sistema operativo para mí, como se alude en mi respuesta. –