2010-01-18 6 views
46

में सभी पर्यावरण चर प्रिंटिंग मैं सी और/या सी ++ में सभी पर्यावरण चरों की सूची कैसे प्राप्त करूं?सी/सी ++

मुझे पता है कि getenv का उपयोग पर्यावरण चर पढ़ने के लिए किया जा सकता है, लेकिन मैं उन्हें सभी कैसे सूचीबद्ध करूं?

+0

कैसे प्रणाली (env) का उपयोग कर env बुला के बारे में? – Vijay

उत्तर

84

वातावरण चर envp तर्क के रूप में main() लिए उपलब्ध कराया जाता - तार के एक अशक्त समाप्त सरणी:

int main(int argc, char **argv, char **envp) 
{ 
    for (char **env = envp; *env != 0; env++) 
    { 
    char *thisEnv = *env; 
    printf("%s\n", thisEnv);  
    } 
    return 0; 
} 
+0

क्या यह विंडोज़ में भी काम करता है? – andrewrk

+11

यदि आप विंडोज़ में काम करते हैं, और यदि आपके पास कंपाइलर है, तो आप इसे क्यों नहीं चलाते और देखते हैं? आईये जानते हैं कि यह कैसा रहेगा। –

+0

जबकि व्यापक रूप से समर्थित है (मुझे किसी भी कंपाइलर के बारे में पता नहीं है जो इसका समर्थन नहीं करता है), मुख्य में "envp" तर्क का उपयोग गारंटी नहीं है, केवल "argc" और "argv" हैं। "envp" यह मुख्य() के लिए स्थानीय बनाता है। एक और पोर्टेबल समाधान "पर्यावरण" बाहरी (वैश्विक) को देखने के लिए है कि बस हर कंपाइलर प्रदान करता है, साथ ही getenv() और setenv() फ़ंक्शंस (जिसे प्रक्रिया 'पर्यावरण में हेरफेर करने की अखंडता सुनिश्चित करने के लिए माना जाता है) । कई कार्यान्वयन एक putenv() फ़ंक्शन भी प्रदान करते हैं, लेकिन यह फ़ंक्शन वातावरण अखंडता सुनिश्चित नहीं कर सकता है। (टिप्पणी स्थान से बाहर चल रहे दस्तावेज़ देखें।) –

4
int main(int argc, char* argv[], char* envp[]) { 
    // loop through envp to get all environments as "NAME=val" until you hit NULL. 
} 
14

मुझे लगता है कि आपको environ जांचना चाहिए। "मैन पर्यावरण" का प्रयोग करें।

+4

http://www.opengroup.org/onlinepubs/007908799/xsh/environ.html – ephemient

8

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

int main (int argc, char **argv, char **envp) 

जहां तीसरे पैरामीटर वातावरण चर जानकारी है: एमएस संकलक और यूनिक्स के सबसे जायके मुख्य के इस संस्करण है।

1

यदि आप विंडोज ऑपरेटिंग सिस्टम पर चल रहे हैं तो आप GetEnvironmentStrings() पर भी कॉल कर सकते हैं जो शून्य समाप्ति तारों का एक ब्लॉक देता है।

main(int argc,char* argv[], char** envp) 

envp सभी परिवेश स्ट्रिंग्स शामिल हैं:

4

सबसे वातावरण में आप अपने मुख्य के रूप में घोषित कर सकते हैं।

37
#include<stdio.h> 

extern char **environ; 

int main() { 
    int i = 1; 
    char *s = *environ; 

    for (; s; i++) { 
    printf("%s\n", s); 
    s = *(environ+i); 
    } 

    return 0; 
} 
+1

आपके उदाहरण में एक बग है। पहला पर्यावरण var दो बार मुद्रित किया जाता है। –

+1

आप 100% सही हैं। मैंने 0 से शुरुआती मान 1 से 0 0 अपडेट किया है। – user1602017

+2

इस समाधान का लाभ यह है कि इसे मुख्य() में होना आवश्यक नहीं है। यह ठीक काम करता है अगर आप इसे एक बड़े और जटिल कार्यक्रम के बीच चिपके रहते हैं। धन्यवाद!! –

5
int main(int argc, char **argv, char** env) { 
    while (*env) 
     printf("%s\n", *env++); 
    return 0; 
} 
संबंधित मुद्दे