व्यवहार में कोई भी पर्यावरण चर का उपयोग करने के लिए सीधे पर्यावरण का उपयोग करता है? [बन्द है]


1

C मानक पुस्तकालय कार्य getenv तथा setenv एक प्रक्रिया के लिए पर्यावरण चर का उपयोग करने के लिए इस्तेमाल किया जा सकता है।

लिनक्स में, एक प्रलेखित वैश्विक चर है environ जो पर्यावरण चर मान तार रखता है, इसलिए सिद्धांत रूप में कोई भी इसे सीधे उपयोग कर सकता है और उपयोग नहीं कर सकता है getenv तथा setenv

मेरे प्रश्न हैं:

  1. यही वजह है कि environ उजागर और आवेदन प्रोग्रामर को प्रलेखित, जहां ऐसा करना अनावश्यक लगता है?

  2. क्या अब कोई सॉफ्टवेयर है, या भविष्य के सॉफ्टवेयर की संभावना है, उपयोग करने के लिए environ सीधे?


1
अनुमान: यह संगतता कारणों के लिए है; पहले यूनिक्स शायद सिर्फ इस्तेमाल किया environ, इसलिये setenv तथा getenv मौजूद नहीं था। और बहुत अच्छी तरह से कुछ विरासत कार्यक्रम हो सकते हैं जो अभी भी इस तरह से करते हैं।
dirkt

यह लिनक्स कर्नेल कोडर्स के लिए एक सवाल है, अधिक संभावना है, और यहां एक अच्छा जवाब मिलने की संभावना कम है क्योंकि यह व्यापक है और इस मामले पर व्यक्तिगत राय के अधीन है।
music2myear

यह सिर्फ Linux नहीं है, यह POSIX है। getenv मानक C है, लेकिन environ main(,,envp) setenv unsetenv putenv केवल POSIX हैं और C के गैर-POSIX कार्यान्वयन हैं
dave_thompson_085

जवाबों:


2
  1. पहले अपने दूसरे प्रश्न का उत्तर देने के लिए,
    • तुच्छ रूप से, env तथा printenv कार्यक्रमों उपयोग environ पूरे वातावरण को सूचीबद्ध करने के लिए।
    • ज्यादातर गोले का उपयोग करते हैं environ एक निर्यात शेल चर में प्रत्येक पर्यावरण चर को कॉपी करने के लिए। (उदाहरण के लिए, बैश में, जैसी आज्ञा set, export तथा declare (बिना किसी तर्क के) गैर-निर्यात किए गए चर के साथ पूरे पर्यावरण की सूची देगा
    • मुझे यकीन नहीं है कि वे इसे कैसे संभालते हैं, परंतु su तथा sudo पर्यावरण की एक प्रमाणित प्रति पास करें कार्यक्रमों के लिए वे आह्वान करते हैं। वे पर्यावरण के माध्यम से पुनरावृत्ति करके ऐसा कर सकते हैं और किस चर को पार करना है, यह तय करना और जो संशोधित करने के लिए।
  2. यही वजह है कि environ उजागर और आवेदन प्रोग्रामर को प्रलेखित?
    • क्योंकि कुछ कार्यक्रमों को इसकी आवश्यकता है (ऊपर देखें)।
    • कर्नेल को पर्यावरण को प्रक्रिया में पास करना होता है (जब यह शुरू होता है) जैसे तैसे। getenv तथा setenv (और कुछ अन्य बातें) पर्यावरण के लिए उपयोग करने की आवश्यकता है। यह कर्नेल के लिए मुश्किल है एक पुस्तकालय दिनचर्या के लिए संवाद करने के लिए जो सक्रिय नहीं है (यानी, कार्यक्रम के किसी भी भाग को जानकारी देने के लिए अन्य कि दिनचर्या (जो कर्नेल को प्रभावित कर रही है)। यह देखते हुए दोगुना मुश्किल हो जाता है कि, यदि आप स्थिर पुस्तकालयों का उपयोग कर रहे हैं, getenv तथा setenv यहां तक ​​कि आपकी प्रक्रिया छवि में भी लिंक नहीं किया जाएगा अगर कार्यक्रम उन्हें नहीं बुलाता है। वैश्विक चर का उपयोग करना सबसे आसान उपाय है।
    • डिजाइनरों / डेवलपर्स ने ऐसा क्यों किया? क्यों नहीं? प्रक्रिया अपने पर्यावरण का मालिक है; इसे इसके साथ जो चाहें करने की अनुमति है

awk तथा perl जावा के पूरे सेट को स्क्रिप्ट के लिए भी एक्सपोज़ करता है, जैसा कि जावा प्रोग्राम्स को करता है (हालांकि यह की सिफारिश की लोग जावा की प्रॉपर्टी स्कीम का इस्तेमाल करते हैं -Dname=value बजाय)।
dave_thompson_085
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.