2010-02-03 15 views
7

एक कॉलेज प्रोजेक्ट के रूप में मुझे फ़ाइल के भीतर से एक मूल फ़ाइल सिस्टम को लागू करने की आवश्यकता है। तो मैं इसके बारे में कैसे जा सकता हूं? मुझे क्या जानने की आवश्यकता होगी? आवश्यकताओं में पृष्ठभूमि में एक डेमॉन प्रक्रिया शामिल है। इसके अलावा आवेदन पत्र है कि इस प्रणाली का उपयोग एक यूनिक्स डोमेन सॉकेटमूल फ़ाइल सिस्टम कार्यान्वित करना

फ़ाइल सिस्टम का उपयोग निम्नलिखित क्षमताओं होना चाहिए सर्वर से कनेक्ट करने की जरूरत है:

  1. सूची उनके आकार के साथ साथ संग्रहीत फ़ाइलों।
  2. बनाएं फ़ाइलों
  3. अगर यह मदद कर सकते हैं यह पता
  4. फ़ाइलें हटाएं फ़ाइलों में परिवर्तन की अनुमति दें
+0

क्या हम यहां कुछ धारणाएं कर सकते हैं: हम वास्तविक फाइल सिस्टम नहीं बना रहे हैं: यानी, हम चीज़ों को देखने के लिए सामान्य एलएस या डीआईआर कमांड का उपयोग करने की उम्मीद नहीं कर रहे हैं। इसके बजाए हम एक ऐसी सेवा को कार्यान्वित कर रहे हैं जो एक सॉकेट पर एक कस्टम इंटरफ़ेस के माध्यम से फ़ाइलों को उजागर करता है। हम सर्वर और क्लाइंट पुस्तकालय दोनों लिख रहे हैं। सर्वर के लिए डेटा एक फ़ाइल के भीतर संग्रहीत किया जाता है। क्या यह सही है? –

+0

इसी तरह के थोड़ा अधिक सामान्य प्रश्न: http://stackoverflow.com/questions/4714056/how-to-implement-a-very-simple-filesystem –

उत्तर

2

चेक। http://www.geocities.ws/ravikiran_uvs/articles/rkfs.html

यदि आप उपयोगकर्ता स्थान में फ़ाइल सिस्टम बनाना चाहते हैं तो FUSE आपकी मदद कर सकता है। http://fuse.sourceforge.net/

+0

लिंक उपयोगी लगता है ... – 5lackp1x3l0x17

+0

@Gael लिंक अब अपडेट किया गया – kumar

0

ऐसा करने का सबसे आसान तरीका डेटा संग्रह करने के लिए एक टेम्पलेट बनाना होगा, और राम को फ़ाइलों में पार्स करना होगा, ज़ाहिर है, यह सबसे कुशल नहीं है।

कुछ की तरह ...

कुछ/स्थान/फ़ाइल का नाम >>> फ़ाइल के सामग्री यहाँ, ऐसा ऐसा < < < कुछ/अन्य/स्थान/File2Name >>> एक और की सामग्री फ़ाइल को यहां < < <

फिर एक निर्देशिका बाहर सूची, regex >>> में समाप्त होने वाले सभी लाइनों को खोजने का उपयोग कर, तो दसवीं स्लैश (खोजा गया फ़ोल्डर में स्लैश की संख्या के आधार पर) के लिए ऊपर पार्स और करएक केस (इन) संवेदनशील खोज, इस पर आधारित है कि आप इसे केस संवेदनशील मानना ​​चाहते हैं या नहीं। बेशक, जैसा कि मैंने इसे स्मृति में लोड करने का उल्लेख किया है, आप एक कुंजी-> मान हैशैप खोज सकते हैं, जो शायद बहुत आसान होगा।

1

एक फ़ाइल सिस्टम फाइलों के लिए मूल रूप से डेटाबेस है। बाइट ऑफसेट और फ़ाइल की लंबाई को संग्रहीत करने के लिए आपको जिस मुख्य चीज की आवश्यकता होगी वह एक लुकअप टेबल है। फ़ाइल नाम को तालिका में भी संग्रहीत किया जा सकता है या उन्हें प्रत्येक ऑफसेट पर पहले कुछ बाइट्स में संग्रहीत किया जा सकता है। यदि आप अपनी फाइल सिस्टम को एक निश्चित आकार बनाते हैं तो यह आपके लिए बहुत आसान होगा।

यह वही होगा जैसा कि एफएटी फाइल सिस्टम काम करता है।

आप http://en.wikipedia.org/wiki/Database_storage_structures पर भी देख सकते हैं क्योंकि निम्नतम स्तर फ़ाइल सिस्टम और डेटाबेस बहुत समान हैं।

3

यहां एक बहुत ही बुनियादी FUSE कार्यान्वयन के an example है जो एक गौरवशाली साझा मेमोरी सेगमेंट (xenstore) द्वारा समर्थित है। यह मूल xenstore FUSE फ़ाइल सिस्टम का एक कांटा है जिसे मैं बनाए रखता हूं।

आपको यह दिखाने के लिए कुछ कोड भी मिलेगा कि FUSE कार्यान्वयन को डीबग करते समय वालग्रिंड को और अधिक सहायक कैसे बनाया जाए।

आप खुला/बनाएँ/पठन/लेखन/truncate के लिए कार्य लिखने/getattr/आदि और उन्हें फ्यूज करने के लिए पारित (लाइन नंबर से जुड़ा हुआ उदाहरण से कर रहे हैं):

343 static struct fuse_operations const xsfs_ops = { 
    344 .getattr = xsfs_getattr, 
    345 .mknod = xsfs_mknod, 
    346 .mkdir = xsfs_mkdir, 
    347 .unlink = xsfs_rm, 
    348 .rmdir = xsfs_rmdir, 
    349 .truncate = xsfs_truncate, 
    350 .open = xsfs_open, 
    351 .read = xsfs_read, 
    352 .write = xsfs_write, 
    353 .readdir = xsfs_readdir, 
    354 .create = xsfs_create, 
    355 .destroy = xsfs_destroy, 
    356 .utime = xsfs_utime, 
    357 .symlink = xsfs_symlink, 
    358 .init = (void *)xsfs_init 
    359 }; 

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

मैं अत्यधिक पूरी तरह से उपयोगकर्ता स्थान में ऐसा करने की अनुशंसा करता हूं, जब तक आपके पास कर्नेल के साथ पर्याप्त परिचित होने के लिए पर्याप्त समय न हो।

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