c++ - How to pass STDIN to child process? -
शून्य WriteToPipe (शून्य) // एक फाइल से पढ़ें और बच्चे की एसटीडीआईएन के लिए पाइप में इसकी सामग्री लिखें। // जब कोई अधिक डेटा नहीं है तब बंद करें {DWORD dwRead, dwWritten; चेर चबफ [बुफसिज़]; BOOL bSuccess = FALSE; चार * नाम = मॉलोक (100); Fgets (नाम, 100, stdin); BSuccess = WriteFile (g_hChildStd_IN_Wr, नाम, 10, और dwWritten, NULL); यदि (! BSuccess) त्रुटिएक्सिट (""); } शून्य ReadFromPipe (शून्य) // STDOUT // के लिए बाल प्रक्रिया के पाइप से आउटपुट पढ़ें और STDOUT के लिए मूल प्रक्रिया के पाइप को लिखें। // जब कोई अधिक डेटा नहीं है तब बंद करें {DWORD dwRead, dwWritten; चेर चबफ [बुफसिज़]; BOOL bSuccess = FALSE; हैंडल hParentStdOut = GetStdHandle (STD_OUTPUT_HANDLE); BSuccess = ReadFile (g_hChildStd_OUT_Rd, chBuf, BUFSIZE, और dwRead, NULL); अगर (! BSuccess || dwRead == 0) 100 रिटर्न; BSuccess = WriteFile (hParentStdOut, chBuf, dwRead, और dwWritten, NULL); अगर (! BSuccess) 101 वापसी; }
मुख्य (पूर्ण नहीं):
जबकि (1) {नींद (500); ReadFromPipe (); WriteToPipe (); }
मैं सीएमडी को एक बाल प्रक्रिया के रूप में खोलने का प्रयास कर रहा हूं और मूल एसटीडीआईएन स्ट्रीम में मूल इनपुट को पास करने और बाल के एसटीडीओटी को प्रिंट करने की अपेक्षा कर रहा हूं।
< P> जैसा कि आप देख सकते हैं, यह पहली बार काम करता है, लेकिन तब मुझे यह "अधिक" मिलता है? वापस बाल प्रक्रिया (सीएमडी) से और फिर यह उत्पादन की प्रतीक्षा में फंस जाता है।मुझे यह क्यों मिल रहा है?
इसका एकमात्र तरीका क्या है? माता पिता इनपुट का पुनर्निर्देशन जिसे मैंने पाया - एक अतिरिक्त धागा पैदा कर रहा है सामान्य एल्गोरिथ्म है:
- पाइप बनाएं - (
hPipeRead
,hPipeWrite
) - मानक इनपुट के साथ बाल प्रक्रिया बनाएं
hPipeRead
- GetStdHandle (STD_INPUT_HANDLE) पढ़ रहा है और
hPipeWrite
को पढ़ा बफर लिख रहा है जो मूल प्रक्रिया में नया थ्रेड बनाएं हाथोंहाथ। - माता-पिता की प्रक्रिया अतिरिक्त धागा का इंतजार कर रही है
इस तरीके में वर्णित है।
Comments
Post a Comment