2010-08-13 14 views

उत्तर

28

environ वैश्विक चर पर एक नज़र डालें।

extern char **environ; 

यह (ऊपर environ (5) आदमी पृष्ठ पर एक नज़र लेने के लिए) unistd.h में परिभाषित किया जा सकता है।

यह एक छोटा सा कोड डेमो मैंने लिखा है:

#include <stdio.h> 
extern char **environ; 

int main() 
{ 
    for (char **env = environ; *env; ++env) 
     printf("%s\n", *env); 
} 

इसका इस्तेमाल करने के तरीके:

[email protected]:~/Desktop$ make enumenv CFLAGS=-std=c99 
cc -std=c99 enumenv.c -o enumenv 
[email protected]:~/Desktop$ ./enumenv 
ORBIT_SOCKETDIR=/tmp/orbit-matt 
SSH_AGENT_PID=1474 
TERM=xterm 
SHELL=/bin/bash 
... (so forth) 
+2

यह परिभाषित नहीं है unistd.h में, या यदि यह है, तो आपका सिस्टम POSIX अनुपालन नहीं है। POSIX के लिए आपको 'बाहरी चार ** वातावरण स्पष्ट रूप से घोषित करने की आवश्यकता है;' यदि आप इसका उपयोग करना चाहते हैं। –

+0

@ आर, +1। कम से कम मेरे सिस्टम पर, यह केवल 'unistd.h' में घोषित किया गया है यदि' __USE_GNU' सेट है, जो इंगित करता है कि यह एक एक्सटेंशन है। (एफडब्ल्यूआईडब्ल्यू, '__environ', एक एक्सटेंशन भी, बिना शर्त घोषित किया जाता है)। –

+0

@ आर: हाँ मैंने इसे अपने उदाहरण कोड में किया था। –

9

पर्यावरण जानकारी मुख्य के लिए एक अतिरिक्त पैरामीटर के रूप में पारित किया जा सकता। मुझे नहीं पता कि यह अनुपालन है या नहीं, लेकिन यह निश्चित रूप से काम करता है (उबंटू पर परीक्षण)। बस अतिरिक्त तर्क और उसके नल सूचक द्वारा समाप्त चार पॉइंटर्स की एक सरणी परिभाषित करें। निम्नलिखित बहुत प्रिंट करेंगे।

#include <stdio> 

int main(int argc, char *argv[], char *envp[]) 
{ 
    int index = 0; 
    while (envp[index]) 
    printf("%s\n", envp[index++]; 
} 
+0

+1: – sje397

+1

से पहले कभी इस बारे में नहीं सुना है अभ्यास में यह ज्यादातर इकाइयों पर काम करता है, लेकिन यह POSIX द्वारा निर्दिष्ट नहीं है। 'बाहरी चार ** वातावरण का उपयोग करें; '। –

+0

जैसा कि जोनाथन ने मेरी अन्य टिप्पणियों में से एक को जवाब दिया, POSIX 2008 के रूप में * अब * unistd.h का हिस्सा है। –

2

पेज 127.

पर पुस्तक "लिनक्स प्रोग्रामिंग इंटरफ़ेस" में एक डेमो लिस्टिंग 6-3 है: प्रक्रिया पर्यावरण प्रदर्शित ------------ ------------------------------------ proc/display_env.c

#include "tlpi_hdr.h" 

extern char **environ; 

int 
main(int argc, char *argv[]) 
{ 
    char **ep; 
    for (ep = environ; *ep != NULL; ep++) 
     puts(*ep); 
    exit(EXIT_SUCCESS); 
} 
संबंधित मुद्दे