2012-07-04 11 views
6

यूनिक्स कर्नेल की अलग प्रक्रिया बिंदु से फ़ाइल वर्णनकर्ता तीन डाटा संरचनाओं का उपयोग कर खुली फ़ाइलों प्रतिनिधित्व करता है।
जब कोई प्रक्रिया दो बार फ़ाइल खोलती है, तो descriptor table में दो अलग-अलग डिस्क्रिप्टर होते हैं, file table में दो प्रविष्टियां (ताकि उनके पास एक ही फ़ाइल में अलग-अलग स्थितियां हों), और वे दोनों v-node table में एक प्रविष्टि को इंगित करते हैं।
और बाल प्रक्रिया में माता-पिता की प्रक्रिया descriptor table प्राप्त होती है, इसलिए कर्नेल क्रमशः प्रत्येक प्रक्रिया के लिए एक descriptor table बनाए रखता है। लेकिन विभिन्न प्रक्रियाओं के दो वर्णनकर्ता open file table में एक ही प्रविष्टि को इंगित करते हैं।
तो
दो खुले फ़ाइल तालिका में एक ही प्रविष्टि

  1. बच्चे की प्रक्रिया में कुछ फ़ाइल पर पढ़ा करता है, माता पिता की प्रक्रिया में एक ही फाइल परिवर्तन की भरपाई होगी?
  2. यदि 1 सत्य है, तो दो प्रक्रियाओं के लिए, क्या एक सुविधाजनक तरीका है कि मैं उसी फ़ाइल पर fork का समान प्रभाव प्राप्त कर सकता हूं? इसका मतलब है कि दो प्रक्रियाएं एक ही फाइल पर एक स्थिति (ऑफ़सेट) जानकारी साझा करती हैं।
  3. क्या कांटा का कोई तरीका है ताकि दोनों प्रक्रियाओं में पूरी तरह से असंबंधित तालिकाओं हों, जैसे कि दो असंबद्ध प्रक्रियाओं की तरह ही उन्होंने एक ही फाइल खोली।

उत्तर

8

बच्चे की प्रक्रिया में कुछ फ़ाइल पर पढ़ा करता है, माता पिता की प्रक्रिया में एक ही फाइल परिवर्तन की भरपाई होगी?

हाँ, ऑफसेट है संग्रहीत सिस्टम-वाइड फ़ाइल तालिका के बाद से। आप dup या dup2 का उपयोग कर एक समान प्रभाव प्राप्त कर सकते हैं।

यदि 1 सत्य है, तो दो प्रक्रियाओं के लिए, क्या एक सुविधाजनक तरीका है कि मैं उसी फ़ाइल पर fork का समान प्रभाव प्राप्त कर सकता हूं? इसका मतलब है कि दो प्रक्रियाएं एक ही फाइल पर एक स्थिति (ऑफ़सेट) जानकारी साझा करती हैं।

यूनिक्स डोमेन सॉकेट का उपयोग करके "फ़ाइल डिस्क्रिप्टर को पास करने" नामक एक तकनीक है। sendmsg में "सहायक" डेटा की तलाश करें।

क्या कांटा का कोई तरीका है ताकि दोनों प्रक्रियाओं में पूरी तरह से असंबंधित तालिकाओं हों, जैसे कि दो असंबद्ध प्रक्रियाओं की तरह ही उन्होंने एक ही फाइल खोली।

आपको यह प्राप्त करने के लिए फ़ाइल को फिर से open करना होगा। यद्यपि यह वही नहीं करता जो आप चाहते हैं, आपको FD_CLOEXEC ध्वज भी देखना चाहिए।

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