2011-03-22 14 views
6

बनाम FreeBSD में पाइप syscall लिनक्स (2.6.35-22-सामान्य) में, man pipe कहा गया है किPOSIX: लिनक्स

पाइप() एक पाइप, कि interprocess संचार के लिए इस्तेमाल किया जा सकता एक यूनिडायरेक्शनल डेटा चैनल बनाता है । "

FreeBSD (6.3 रिलीज-P5) में, man pipe कि

पाइप() सिस्टम कॉल एक पाइप, जो एक वस्तु द्विदिश डाटा प्रवाह की इजाजत दी है बनाता है, और alloca कहा गया है फाइल डिस्क्रिप्टर की एक जोड़ी है। "

एक यूनिडायरेक्शनल है, दूसरा द्विपक्षीय है। मुझे उम्मीद है कि यह मूर्खतापूर्ण सवाल नहीं है, लेकिन ऐसा करने का मानक तरीका कौन सा तरीका है? क्या वे दोनों POSIX अनुपालन कर रहे हैं?

+0

मुझे आशा है कि आप अपने अंक वापस लेंगे। यह जांच करने के लिए एक बेवकूफ बात है। हालांकि सामान्य POSIX ज्ञान की जांच करने के लिए एक बड़ी बात है। –

उत्तर

4

मैं पहली बार में ग्रेग के जवाब पर एक टिप्पणी के रूप में इस शुरू कर दिया है, लेकिन यह मेरे लिए होता है कि इसे और अधिक बारीकी अपने विशिष्ट सवाल का जवाब:

pipe() रों documentation in the POSIX standard स्पष्ट रूप से कहा है कि प्रश्न में व्यवहार "अनिर्दिष्ट" है - अर्थात, pipe() को द्विपक्षीय होने की आवश्यकता नहीं है, हालांकि यह प्रतिबंधित नहीं है। लिनक्स यूनिडायरेक्शनल है, फ्रीबीएसडी बिडरेक्शनल है। दोनों अनुपालनशील हैं, केवल एक अतिरिक्त व्यवहार लागू करता है जो आवश्यक नहीं है (लेकिन अनुपालन प्रणालियों पर काम करने के लिए बनाए गए ऐप्स को तोड़ता नहीं है)।

डाटा फ़ाइल वर्णनकर्ता fildes को लिखा जा सकता है [1] और फ़ाइल वर्णनकर्ता fildes से पढ़ा [0]। पर फ़ाइल डिस्क्रिप्टर fildes [0] फ़ाइल डिस्क्रिप्टर fildes [1] पर पहले-इन-फर्स्ट-आउट आधार पर लिखे गए पहुंच डेटा पर पढ़ा जाएगा। यह निर्दिष्ट नहीं है कि क्या फिल्ड [0] भी लेखन के लिए खुला है और क्या फिल्ड [1] पढ़ने के लिए भी खुला है।

मैं अंक वापस पाने पर भरोसा नहीं करता (हालांकि आपको चाहिए)। प्रोफेसरों के पास असली दुनिया को अनदेखा करने की प्रवृत्ति है जो उन्होंने तय किया है, सही है।

+0

प्रतिक्रिया के लिए धन्यवाद, POSIX spec का लिंक विशेष रूप से सहायक है। – Joseph

3

पी FreeBSD man page for pipe इस मुद्दे पर बहुत स्पष्ट है,

मेरे इरादे स्पष्ट करने के लिए, मैं एक परीक्षा पर कुछ अंक पाइप विश्वास करने के लिए() खो दिया एक ही रास्ता था और कुछ कारतूस किसी भी अंक वापस पाने के लिए देख रहा हूँ :

पाइप के इस कार्यान्वयन के द्विदिश प्रकृति तो यह परंपरागत तरीके से अंतिम बिंदु का उपयोग करते समय एक ही दिशा में एक पाइप का उपयोग कर के लिए सम्मेलन का उपयोग करने की सिफारिश की है, पुराने सिस्टम के लिए पोर्टेबल नहीं है।