2009-01-13 28 views
5

मुझे कुछ फ़ाइल में पुनर्निर्देशित मानक त्रुटि स्ट्रीम के साथ एक नई प्रक्रिया बनाने की आवश्यकता है। जिस कोड से बाल प्रक्रिया बनाई जा रही है, उसके पास कोई कंसोल उपलब्ध नहीं है, ऐसे में ऐसे मामले हैं जब GetStdHandle (कोई भी) 0 लौटाएगा। बाल प्रक्रिया किसी भी कारण से अपने सभी मानक आईओ हैंडल को डुप्लिकेट करने का प्रयास करेगी (बाल प्रक्रिया के लिए स्रोत कोड अनुपलब्ध है) तो इसके सभी हैंडल वैध होना चाहिए।"नूल" फ़ाइल कैसे खोलें?

तो मैं एक ही तरीके से उस प्रक्रिया को चलाने की आवश्यकता के रूप में यह साथ कंसोल से भाग गया जा सकती है:

someproc <nul >nul 2>err 

मैं इसके लिए कुछ मायनों देखें: 1. पाइप के दो जोड़ी बनाएँ। यह संभवतः अच्छा समाधान है, लेकिन यह मेरे लिए बहुत जटिल होगा। 2. CreateFile ("nul", ...) फ़ंक्शन कॉल के साथ "nul" फ़ाइल खोलें। इस कॉल द्वारा कोई फ़ाइल नहीं बनाई जा रही है, लेकिन यह भी मुझे अजीब लग रहा है। 3. INVALID_HANDLE_VALUE का उपयोग करें। यह भी काम करता है, लेकिन मुझे लगता है कि एक और बच्चे की प्रक्रियाओं के साथ अलग-अलग समस्याएं हो सकती हैं।

मुझे विश्वास है कि बेहतर तरीके हैं।

+0

बहुत अच्छा! संभावनाओं को सूचीबद्ध करने के लिए धन्यवाद। –

उत्तर

6

मूल रूप से phrased के रूप में, आप पहले से ही अपने स्वयं के प्रश्न का उत्तर दिया है। एक "नूल" फ़ाइल खोलने के लिए, जब आप CreateFile पर कॉल करते हैं तो आप बस "nul" निर्दिष्ट करते हैं। यह केवल अजीब दिखता है क्योंकि शायद ही कभी कोई भी फ़ाइल नाम का उपयोग करता है। (मुझे लगता है कि यह लगभग /dev/null देखता है।) यह पूरी तरह मान्य है, हालांकि।

लेकिन यदि आपको लगता है कि Invalid_Handle_Value काम भी करता है, तो आगे बढ़ें और इसके बजाय इसका उपयोग करें। यह निश्चित रूप से सबसे आसान है। मैं इसे शुरू करने की उम्मीद नहीं करता था, शुरुआत में, क्योंकि मैं इसे डुप्लीकेट करने की अपेक्षा नहीं करता था।

2

हां, "नूल" जो आप सोचते हैं वह कर रहा है। यदि आप यूनिक्स में जाते हैं, तो यह "/ dev/null" होगा। अजीब नाम "PRN" और "com1", आदि

1

DuplicateHandle साथ INVALID_HANDLE_VALUE का उपयोग के साथ साथ, डॉस दिनों से पकड़ मिली है अनुचित है: प्रलेखन कहा गया है कि आप सही हैंडल पर PROCESS_DUP_HANDLE पहुँच की आवश्यकता है। आपके पास INVALID_HANDLE_VALUE सही नहीं है। डिवाइस NUL (/device/null के प्रतीकात्मक लिंक) ठीक काम करेंगे, हालांकि।

संबंधित मुद्दे