2012-11-26 44 views
7

के लिए लिनक्स में निम्न स्तर की डिस्क ऑपरेशंस सी ++ में निम्न स्तर की डिस्क संचालन के लिए लिनक्स में किस प्रकार की विधियां मौजूद हैं? मैं डिस्क पर डेटा के अपने प्रबंधक को लिखने का प्रयास कर रहा हूं। उदाहरण के लिए, मैं लिनक्स पर्यावरण में एक सी ++ प्रोग्राम बनाना चाहता हूं जिसने डिस्क पर एक निश्चित राशि (निरंतर) आवंटित की है और फिर स्वतंत्र रूप से मुझे डेटा के उस हिस्से को पढ़ने/लिखने की अनुमति देता है। मुझे नहीं लगता कि मैं मानक fstream::open का उपयोग करना चाहता हूं क्योंकि तब फ़ाइल ओएस द्वारा प्रबंधित की जाती है और मुझे डिस्क पर निरंतर अनुभाग नहीं मिल सकता है।सी ++

धन्यवाद।

+1

यहां बहुत सारी चीज़ें भी हैं: http://bit.ly/V2ruze – soulseekah

उत्तर

4

आम तौर पर, लिनक्स में उपयोगकर्ता प्रोग्राम से "निम्न स्तर" डिस्क ऑपरेशन डिस्क विशेष डिवाइस खोलने में शामिल है। मेरे कंप्यूटर पर, इन्हें "/ dev/sda" या "/ dev/sda4" या यहां तक ​​कि "/ dev/disk/by-uuid/2a5150b4-71cb-11e1-b2fe-3b0d270b4e16" नाम भी कहा जाता है।

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

fstream का उपयोग करने का सवाल ऑर्थोगोनल है या नहीं। डिवाइस को खोलने के लिए आप std::fstream, fopen या यहां तक ​​कि open का उपयोग कर सकते हैं। फिर जो भी पढ़ा ऑपरेशन आपके द्वारा किए गए खुले मैचों से मेल खाता है।

अपने विशिष्ट उदाहरण के लिए, आप पुनर्विचार कर सकते हैं कि आपको इस कार्यक्षमता की आवश्यकता है या नहीं। Wikipedia, जो बारी में Linux System Administrator Guide के हवाले से किया जाता है का हवाला देते हुए:

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


जब से तुम उल्लेख सी ++, मुझे लगता है कि आप किसी उपयोगकर्ता कार्यक्रम और नहीं एक डिवाइस ड्राइवर लिख रहे हैं। वास्तव में "निम्न स्तर" डिस्क ऑपरेशन केवल कर्नेल के अंदर उपलब्ध हैं। यदि आप वास्तव में, डिवाइस ड्राइवर लिखना चाहते हैं, तो कृपया इसे स्पष्ट करने के लिए अपने प्रश्न को पुन: प्रारंभ करें।

+2

बस यह सुनिश्चित करें कि यह सही डिवाइस है, इसका उपयोग करके आपके सिस्टम विभाजन को लिखना एक अच्छा विचार नहीं है। अधिकांश मामलों में (स्पष्ट कारणों से) रूट रूट की भी आवश्यकता है। – josefx

+0

@josefx - धन्यवाद। साहित्यिक चोरी वाला। –

+1

धन्यवाद @ रोब, मैं डेटाबेस प्रबंधन प्रणाली (डीबीएमएस) लिखने की कोशिश कर रहा हूं, इसलिए यह डिवाइस चालक नहीं बल्कि सॉफ्टवेयर का एक टुकड़ा है। बढ़िया जानकारी के लिए शुक्रिया! – Matthew

1

मुझे मानक लिनक्स फाइल सिस्टम का उपयोग करके ऐसा करने के किसी भी तरीके से अवगत नहीं है। मुझे लगता है कि आपको एक अलग विभाजन होना होगा और I/O सीधे dev छद्म फ़ाइल (उदा। /dev/sda2) पर करना होगा।

-2

आपको सिस्टम कॉल का उपयोग करना चाहिए। यहां एक सूची है: linux system calls

+0

मुझे लगता है कि वह डाउनवॉट किया गया था क्योंकि वह पृष्ठ 2.2 कर्नेल को संदर्भित करता है? या यह कुछ और था ... –

+0

मैंने इसे नमूना के रूप में लिखा, मैं कैसे जानता हूं कि वह कौन सा कर्नेल संस्करण उपयोग करता है? अधिकांश सिस्टम कॉल लिनक्स कर्नेल पर समान हैं। –

+0

वैसे मेरी कंपनी उस वेबसाइट को "खतरनाक \t सत्यापित धोखेबाज पृष्ठ या धमकी स्रोत" के लिए अवरुद्ध करती है। लेकिन यह हो सकता है कि सिस्टम कॉल की एक सूची केवल सहायक उत्तर नहीं है। –