2013-01-02 53 views
9

यदि मैं एक पर्ल स्क्रिप्ट लिख रहा हूं जो एसटीडीईआरटी के डुप्लिकेट के साथ एसटीडीईआरआर को ओवरराइट करता है लेकिन मैंने कभी भी फाइलहेडल को पुनर्स्थापित नहीं किया है, तो स्क्रिप्ट निष्पादन के अंत में क्या होता है? मुझे ऐसा कुछ भी नहीं मिल रहा है जो वास्तव में होता है या नहीं होता है।क्या होता है यदि आप पर्ल में फ़ाइलहेडल बंद नहीं करते हैं?

मुझे शायद गलत जानकारी मिली है लेकिन आपके धैर्य के लिए धन्यवाद।

उत्तर

12

जब कोई प्रक्रिया निकलती है, तो कर्नेल सभी प्रयुक्त संसाधनों को पुनः प्राप्त करता है। इसमें सभी फ़ाइल डिस्क्रिप्टर शामिल हैं, जो कि बस बंद हैं। यदि कोई एप्लिकेशन-स्तरीय बफर है, तो उस बफर में डेटा कर्नेल को लिखा नहीं गया हो सकता है, लेकिन अन्यथा फ़ाइल डिस्क्रिप्टर को बाहर निकलने से पहले खोलने में कोई जोखिम नहीं है।

यदि आपकी पर्ल स्क्रिप्ट किसी अन्य प्रक्रिया को लॉन्च करने के लिए exec का उपयोग करके समाप्त होती है, तो उस प्रक्रिया में सभी फ़ाइल डिस्क्रिप्टर (निष्पादन के करीब चिह्नित किए गए को छोड़कर) का वारिस होगा।

+2

इसके अलावा, पर्ल सामान्य रूप से आवश्यकतानुसार अपने स्वयं के बफर को फ्लश करने का ख्याल रखेगा, जब तक कि आप 'मार 9, $$' जैसे मूर्खतापूर्ण कुछ न करें। हालांकि ऐसा लगता है कि कुछ प्लेटफार्मों पर कुछ मामूली [इसके साथ शेष मुद्दे] (http://perldoc.perl.org/perlport.html#exec) हैं। –