आप विंडोज पर एक समान तकनीक का उपयोग कर सकते हैं, आपको बस एक ही अवधारणाओं के लिए अलग-अलग शब्दों का उपयोग करने की आवश्यकता है। :) यह आलेख: http://msdn.microsoft.com/en-us/ लाइब्रेरी/ms682499.aspx किसी अन्य प्रक्रिया से I/O को संभालने के लिए Win32 पाइप का उपयोग करता है, आपको केवल उसी प्रक्रिया में थ्रेड के साथ एक ही चीज़ करना है। बेशक, आपके मामले में प्रक्रिया में कहीं से भी stderr के सभी आउटपुट आपके उपभोक्ता को रीडायरेक्ट कर दिया जाएगा।
असल में, आपको जिस पहेली की आवश्यकता हो सकती है, उसके अन्य टुकड़े _fdopen और _open_osfhandle । असल में, यहां कुछ कोड से एक संबंधित उदाहरण दिया गया है जिसे मैंने कई साल पहले जारी किया था:
DWORD CALLBACK DoDebugThread(void *)
{
AllocConsole();
SetConsoleTitle("Copilot Debugger");
//The following is a really disgusting hack to make stdin and stdout attach
//to the newly created console using the MSVC++ libraries. I hope other
//operating systems don't need this kind of kludge.. :)
stdout->_file = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
stdin->_file = _open_osfhandle((long)GetStdHandle(STD_INPUT_HANDLE), _O_TEXT);
debug();
stdout->_file = -1;
stdin->_file = -1;
FreeConsole();
CPU_run();
return 0;
}
इस मामले में, मुख्य प्रक्रिया एक जीयूआई प्रक्रिया थी जो स्टडीओ हैंडल से बिल्कुल शुरू नहीं होती है। यह एक कंसोल खोलता है, फिर दाहिने हैंडल को stdout और stdin में डालता है ताकि डीबग() फ़ंक्शन (जो एक स्टडीओ इंटरैक्टिव फ़ंक्शन के रूप में डिज़ाइन किया गया हो) नव निर्मित कंसोल के साथ बातचीत कर सकता है। आप कुछ पाइप खोलने और stderr को पुनर्निर्देशित करने के लिए एक ही तरह की चीज करने में सक्षम होना चाहिए।