आप printf
पर interposing एक गंदा खेल आप 'चोरी' कर सकते हैं खेलने के लिए तैयार हैं, तो इसके उत्पादन की तरह कुछ कर रही है: आप एक झंडा इस्तेमाल कर सकते हैं
#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;
}
दर्शाने के लिए जिन मामलों में आप चाहते हैं को संभालने के लिए सामान्य के रूप में काम करने के लिए printf। (उदा। इसे fprintf
पर मानचित्र करें या वास्तविक कॉल खोजने के लिए dlsym()
/समान का उपयोग करें)।
आप बफर के आकार को अधिक समझदारी से प्रबंधित करने के लिए realloc
का भी उपयोग कर सकते हैं।
क्या होगा यदि 'funcB' इसके आउटपुट को प्रिंट नहीं करेगा, बल्कि इसे' funcA' पर वापस कर देगा? आपके द्वारा प्रदान किए गए सार विवरण से कठिन कहना, अधिक विशिष्ट होना चाहिए। – LihO
* "यह एक सी ++ प्रश्न है" * - यह मुझे एक सी सवाल की तरह दिखता है। यदि यह सी ++ था तो आप ऐसा कुछ कर सकते थे: [यह] (http://stackoverflow.com/a/8076948/168175)। – Flexo
यह मेरे उत्तर में उल्लिखित एक ओएस-specfic सवाल की तरह दिखता है। –