2011-09-20 26 views
8

ऐसा लगता है कि दोनों एक ही काम करते हैं, हुह?पर्ल में खुले और सिसोपेन के बीच क्या अंतर है?

क्या कोई मुझे एक उदाहरण दिखा सकता है जहां वे अलग-अलग काम करते हैं?

+2

यह एक आंतरिक अंतर नहीं है, यह एक बाहरी अंतर है, जैसे ब्लैगोवेस्ट Buyukliev ने कहा। – ikegami

+0

@lexer, मैंने थोड़ा और स्पष्टीकरण जोड़ा है। आशा करता हूँ की ये काम करेगा। –

उत्तर

18

sysopen, open(2) गिरी सिस्टम कॉल चारों ओर एक पतली आवरण (तर्क सीधे अनुरूप) है, जबकि open एक उच्च स्तरीय आवरण है जो आप पुनर्निर्देशन करने के लिए सक्षम बनाता है, पाइपिंग, आदि

जब तक आप के साथ काम कर रहे हैं डिस्क पर सामान्य फ़ाइलों के लिए open के साथ ठीक होना चाहिए, एक विशिष्ट डिवाइस जिसके लिए कुछ विशेष झंडे open(2) समय पर पारित होने की आवश्यकता होती है।

+0

मुझे अभी भी अंतर दिखाई नहीं दे रहा है हालांकि – lexer

+2

@lexer: वास्तव में कहने के लिए और कुछ नहीं है - बाकी को यह समझना है कि सिस्टम कॉल क्या है, और 'ओपन (2)' का विशेष इंटरफ़ेस क्या है, जिसमें से सभी ओएस सामान, पर्ल-विशिष्ट नहीं। –

+2

@lexer: उत्तर स्पॉट पर है। यदि आपको वास्तविक जीवन एक्सपैपल की आवश्यकता है, तो 'O_WRONLY | O_EXCL | O_CREAT' कॉम्बो' पर विचार करें, यानी "अगर मौजूद नहीं है तो लिखें और लिखें"। '-f ... या खोलें ...' का उपयोग करना सिर्फ दौड़ की स्थिति के लिए पूछ रहा है। – Dallaylaen

12

perlopentut के शब्दों में:

आप खोल की सुविधा चाहते हैं, तो पर्ल के खुले जाने का रास्ता है निश्चित रूप से। दूसरी तरफ, यदि आप सी के सरल फॉपेन (3 एस) की तुलना में बेहतर परिशुद्धता चाहते हैं तो आपको पर्ल सिसोपेन देखना चाहिए, जो खुले (2) सिस्टम कॉल में प्रत्यक्ष हुक है। इसका मतलब यह थोड़ा अधिक शामिल है, लेकिन यह परिशुद्धता की कीमत है।

चूंकि पर्ल सी में लिखा गया है, दोनों विधियों की संभावना open(2) सिस्टम कॉल करने की संभावना है। अंतर पर्ल में open() है कि कुछ है कि में बनाया ब्योरा उद्घाटन, पाइपिंग और पुनर्निर्देशनबहुत आसान बनाते हैं। उसी समय, हालांकि, open() कुछ लचीलापन लेता है। sysopen() में Fcntl कार्यक्षमता में से कोई भी उपलब्ध नहीं है, और न ही इसमें मास्किंग कार्यक्षमता है।

अधिकांश स्थितियों को केवल open() की आवश्यकता है।

+0

क्या आप 'सीसीओपीएन' में उपलब्ध 'एफसीएनटीएल' और मास्किंग कार्यक्षमता का एक उदाहरण प्रदान कर सकते हैं? – lexer

+0

मास्क के कुछ महान उदाहरण यहां दिए गए हैं: http://perldoc.perl.org/perlopentut.html#Permissions-agrave-la-mode, और उसी लिंक में अनुभाग जहां ऊपर लिंक भूमि के महान उदाहरण हैं 'Fcntl' विशेषताएं। वह खंड वाक्यांश के साथ शुरू होता है "और यहां वे चीजें हैं जो आप सिसोपेन के साथ कर सकते हैं कि आप नियमित रूप से खुले नहीं कर सकते हैं।" का आनंद लें! –

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