2010-03-05 13 views
7

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

उत्तर

9

रजिस्ट्री की अवधारणा Windows के लिए अजीब है, और माइक्रोसॉफ्ट एक बार के लिए यह बीमार कल्पना की जा रही भर्ती कराया (देखें this, this, this, this (see #2), और this)।

यूनिक्स और लिनक्स में, सिस्टम-व्यापी प्रोग्राम के लिए कॉन्फ़िगरेशन/etc या शायद एक एप्लिकेशन-विशिष्ट उपनिर्देशिका है।

प्रति उपयोगकर्ता कॉन्फ़िगरेशन डेटा उपयोगकर्ता की होम निर्देशिका में एक छिपी हुई फ़ाइल-पाठ प्रारूप में या उपयोगकर्ता की होम निर्देशिका में एप्लिकेशन-विशिष्ट छिपी निर्देशिका में रखा जाता है। घर निर्देशिका का संदर्भ देने का उचित तरीका पर्यावरण चर HOME के माध्यम से है। छिपी हुई फाइलें और निर्देशिकाएं नाम के पहले अक्षर . बनाकर बनाई गई हैं।

सिस्टम-व्यापी विन्यास के लिए उदाहरण /etc/wgetrc और /etc/ssh/ है। प्रति उपयोगकर्ता डेटा के उदाहरण $HOME/.bashrc और $HOME/.mozilla/ हैं।

+2

आपको पर्यावरण परिवर्तनीय होम पर भरोसा नहीं करना चाहिए। चूंकि हम सी ++ से बात कर रहे हैं जो सिस्टम कॉल कर सकता है, आपको 'struct passwd * pw = getpwuid (getuid()) करना चाहिए; '(या' getpwuid_r' अगर आपको थ्रेड सुरक्षा की आवश्यकता है) और फिर 'pw-> के मान का उपयोग करें pw_dir' –

+0

अच्छा सुझाव। मुझे $ HOME का उपयोग करने में कोई समस्या नहीं है। मुझे लगता है कि कई कार्यक्रमों को भी इस तरह से काम करना चाहिए, क्योंकि कभी-कभी मैंने उपयोगी, अपेक्षित परिणामों के साथ घर पर कब्जा कर लिया है। – wallyk

+0

धन्यवाद, मुझे लगता है कि मैं इसका अनुसरण करूंगा।बीटीडब्लू, क्या मैं प्रोग्राम में होम निर्देशिका के लिए "~" का उपयोग कर सकता हूं? –

1

यह लिनक्स के आपके स्वाद पर थोड़ा सा निर्भर करता है लेकिन एक सामान्य नियम के रूप में अधिकांश प्रोग्रामों में आपके घर निर्देशिका में .config फ़ाइलों के साथ कहीं भी सिस्टम डिफ़ॉल्ट कॉन्फ़िगरेशन होता है जो/etc dir में डिफ़ॉल्ट को ओवरराइड कर सकता है।


महान बिंदु .config होना चाहिए। [कॉन्फ़िग फ़ाइल का नाम]

+2

आप यह स्पष्ट करना चाहते हैं कि ".config" से आप वास्तव में एक फ़ाइल का नाम लेते हैं जिसका नाम "।", * नहीं * एक ".config" एक्सटेंशन वाला फ़ाइल है। "।" उपसर्ग डिफ़ॉल्ट रूप से फ़ाइलों को "छिपा" रखना है। जिन प्रोग्रामों में कॉन्फ़िगरेशन फ़ाइलों का समूह होता है, उनमें कुछ फ़ाइलों के साथ ".config" निर्देशिका होगी। साथ ही, पुराने स्कूल यूनिक्स ऐप्स अपनी कॉन्फ़िगरेशन फ़ाइल/निर्देशिका के लिए "। [Appname] rc" नाम का उपयोग करते हैं। –

4

XDG बेस निर्देशिका विशिष्टता को निर्दिष्ट करता है जहां विन्यास और अन्य फाइलों Linux और अन्य एक्स-आधारित ऑपरेटिंग सिस्टम में संग्रहित किया जाना चाहिए:

http://freedesktop.org/wiki/Specifications/basedir-spec

इस आधुनिक तरीका है, और अंत में dotfile गंदगी को कम कर सकते ठेठ उपयोगकर्ता की होम निर्देशिका में।

2

डॉटफाइल क्लासिक यूनिक्स समाधान हैं। यदि आप सबकुछ पढ़ने/लिखने से निपटना चाहते हैं, तो इसके लिए जाएं।

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

+0

जीकॉनएफ के बारे में अच्छा बिंदु, धन्यवाद। मेरे मामले में, मेरे पास एक्सएमएल कॉन्फ़िगरेशन फ़ाइलों को प्रबंधित करने के लिए क्रॉस-प्लेटफ़ॉर्म कोड है, जो पहले से ही विंडोज़ में चल रहा है। यह पहले से ही किया जा रहा है, मुझे कॉन्फ़िगरेशन फाइल पथ का चयन करने के लिए प्लेटफ़ॉर्म-विशिष्ट कोड जोड़ने की आवश्यकता है। * अन्य * लोकप्रिय डेस्कटॉप की कॉन्फ़िगरेशन योजना के लिए –

+1

http://api.kde.org/4.0-api/kdelibs-apidocs/kdecore/html/classKConfig.html। – ephemient