2013-01-07 20 views
6

मैं यूनिक्स प्रणाली फ़ाइल तालिकाओं के बारे में उलझन में हूँ।यूनिक्स प्रणाली फ़ाइल टेबल

  • दो या अधिक प्रक्रियाओं पढ़ने के लिए एक फ़ाइल खोलते हैं, तो सिस्टम फ़ाइल तालिका प्रत्येक प्रक्रिया या एक ही प्रवेश के लिए अलग-अलग प्रविष्टियों बनाता है?

  • यदि एक ही फ़ाइल खोलने वाली एकाधिक प्रक्रियाओं के लिए एक एकल प्रविष्टि बनाई गई है, तो क्या उनकी फ़ाइल ऑफ़सेट भी वही होगी?

  • हैं process 1 पढ़ने के लिए खोलता है file1.txt और process 2, सिस्टम फ़ाइल तालिका में एक या दो प्रविष्टियों पैदा करेगा लिखने के लिए एक ही फाइल file1.txt खोलता है?

+0

http://stackoverflow.com/questions/4277289/are-file-descriptors-shared-when-forking –

+0

सर की Dup से है? वह माता-पिता और कांटा सामान के बारे में पूछ रहा है, मेरा प्रश्न अलग है – Alfred

उत्तर

19

तीन "सिस्टम फ़ाइल टेबल" के होते हैं: एक फ़ाइल वर्णनकर्ता तालिका फ़ाइल खोलने सारणी की प्रविष्टियों के फ़ाइल वर्णनकर्ता (छोटे पूर्णांक) नक्शे नहीं है। खुली फ़ाइल तालिका में प्रत्येक प्रविष्टि में (अन्य चीजों के साथ) फ़ाइल ऑफ़सेट और इन-मेमोरी इनोड तालिका में पॉइंटर होता है। यहाँ एक चित्र है: http://www.cs.ucsb.edu/~rich/class/cs170/notes/FileSystem/filetable.rich.jpg

तो वहाँ न तो एक फ़ाइल खोलने के लिए सिर्फ एक फ़ाइल तालिका प्रविष्टि है और न ही वहाँ सिर्फ प्रक्रिया के अनुसार एक है ... वहाँ प्रति open() कॉल से एक है, और यह साझा किया जाता है, तो फ़ाइल वर्णनकर्ता dup() एड है या fork() एड।

अपने प्रश्नों का उत्तर देना:

1) दो या अधिक प्रक्रियाओं पढ़ने के लिए एक फ़ाइल को खोलने है, वहाँ खुला प्रति खुले फ़ाइल तालिका में एक प्रविष्टि है। यहां तक ​​कि प्रति अगर खुला एक प्रक्रिया फ़ाइल को कई बार खुल जाता है एक प्रविष्टि है।

2) एक ही प्रविष्टि एक ही फ़ाइल खोलने वाली विभिन्न प्रक्रियाओं के लिए खुली फ़ाइल तालिका में बनाई गई नहीं है (लेकिन इन-मेमोरी इनोड तालिका में केवल एक प्रविष्टि है)।

3) file1.txt एक ही या दो अलग अलग प्रक्रियाओं में दो बार खोला जाता है,, वहाँ दो अलग फ़ाइल खोलने तालिका प्रविष्टियों (लेकिन इन-स्मृति inode तालिका में केवल एक प्रविष्टि) कर रहे हैं।

+0

मैं सिस्टम फ़ाइल तालिका के बारे में पूछ रहा हूं। – Alfred

+2

फ़ाइल खोलने टेबल है और इन-स्मृति inode तालिका नहीं है ... इन दोनों को "प्रणाली" फ़ाइल टेबल क्योंकि वे सिस्टम (OS) द्वारा किया जाता है कर रहे हैं। आपका प्रश्न फाइल खोलने के बारे में है, इसलिए यह पूर्व के बारे में होना चाहिए, बाद वाले नहीं। –

+0

जहां तक ​​मैं वहां तीन तालिकाओं (कम से कम) के रूप में जानता हूं।फ़ाइल डिस्क्रिप्टर टेबल, सिस्टम फ़ाइल टेबल और मेमोरी इनोड टेबल – Alfred

0

फ़ाइल प्रक्रिया और फाइल सिस्टम के आधार पर एक ही प्रक्रिया को कई प्रक्रियाओं द्वारा एक साथ खोला जा सकता है, और उसी प्रक्रिया के परिणामस्वरूप (उसी फ़ाइल के लिए कई फ़ाइल डिस्क्रिप्टर भी हो सकते हैं)। फाइल पॉइंटर को स्थानांतरित करने या इसे बंद करने जैसे वर्णनकर्ताओं पर संचालन स्वतंत्र हैं (वे एक ही फ़ाइल के लिए अन्य वर्णनकर्ताओं को प्रभावित नहीं करते हैं)। फ़ाइल के संचालन (जैसे लिखना) अन्य डिस्क्रिप्टरों पर संचालन द्वारा देखा जा सकता है (एक पूर्ववर्ती पढ़ा लिखित डेटा पढ़ सकता है)।

यह कैसे इस एक नकली हो सकता है open(System call) wiki page

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