2013-07-29 4 views
14

मैं कई चर निर्यात करने के लिए की जरूरत है ऐसी है कि वे आदेश पंक्तिC++ में एक चर निर्यात करने के लिए setenv() का उपयोग कैसे करें? ++ कि प्राप्त करने के लिए

export ROS_HOSTNAME=xxx 

मैं ग में setenv() का उपयोग कैसे करूँ में ऐसा दिखाई देगा?

धन्यवाद।

+0

आपने अपने प्रश्न के संदर्भ में [टैग: कमांड लाइन] टैग का किस कारण से उल्लेख किया? आपको _'export'_ कहां जाना होगा? कृपया इसे विस्तृत करें! –

+1

इन पर्यावरण चरों को किस संदर्भ में दिखाना आवश्यक है? अगर उन्हें केवल उस कार्यक्रम के भीतर दिखाई देने की आवश्यकता है जो 'setenv' कहता है, तो आप ठीक हैं। यदि प्रोग्राम चलाने के बाद आपको अपने खोल * में दिखाई देने की आवश्यकता है, तो कृपया ऐसा कहें; ऐसा करने के लिए (अप्रत्यक्ष) तरीके हैं, लेकिन मैं उस प्रश्न का उत्तर नहीं दे रहा हूं जबतक कि आप इसे न पूछें। –

+0

"निर्यात" एक * खोल सुविधा * है। 'setenv()' हमेशा "निर्यात" 'पर्यावरण '/' envp' निर्यात करें जब तक कि फोर्कड बच्चे को अनुकूलित' envp', यानी 'execle() 'पास नहीं किया जाता है। – Barry

उत्तर

21
setenv() मैनुअल प्रविष्टि से

:

SYNOPSIS

#include <stdlib.h> 
int setenv(const char *envname, const char *envval, int overwrite); 

वर्णन
setenv() फ़ंक्शन को अद्यतन करेगा या फोन करने की प्रक्रिया के वातावरण में एक चर जोड़ें। Envname तर्क एक स्ट्रिंग को इंगित करता है जिसमें पर्यावरण चर के नाम को जोड़ा या बदला जा सकता है। पर्यावरण परिवर्तक को उस बिंदु पर सेट किया जाएगा जिसमें envval अंक हैं। फ़ंक्शन विफल हो जाएगा यदि envname एक स्ट्रिंग को इंगित करता है जिसमें '=' ​​वर्ण होता है। यदि envname द्वारा नामित पर्यावरण चर पहले से मौजूद है और ओवरराइट का मान शून्य-शून्य है, तो फ़ंक्शन सफलता वापस कर देगा और पर्यावरण अपडेट किया जाएगा। यदि पर्यावरण envname द्वारा नामित चर पहले से मौजूद है और ओवरराइट का मान शून्य है, तो फ़ंक्शन सफलता वापस कर देगा और पर्यावरण अपरिवर्तित रहेगा।

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

envname और envval द्वारा वर्णित तारों को इस फ़ंक्शन द्वारा कॉपी किया गया है।

setenv() फ़ंक्शन को पुन: प्रस्तुत करने की आवश्यकता नहीं है। एक फ़ंक्शन जिसे पुनर्वित्त करने की आवश्यकता नहीं है उसे थ्रेड-सुरक्षित होने की आवश्यकता नहीं है।

वापसी मान
सफल समापन पर, शून्य लौटा दिया जाएगा। अन्यथा, -1 वापस किया जाएगा, त्रुटि को इंगित करने के लिए त्रुटि सेट, और पर्यावरण अपरिवर्तित होगा।

तो आप अपने मामले के लिए

setenv("ROS_HOSTNAME","xxx",1); // does overwrite 

या

setenv("ROS_HOSTNAME","xxx",0); // does not overwrite 

फोन करना चाहिए। निर्भर करता है, यदि आप संभावित रूप से मौजूदा परिभाषा को ओवरराइट करना चाहते हैं।

नोट:

आप setenv() उपयोग नहीं कर सकते बुला प्रक्रिया (शेल) के लिए अपनी प्रक्रिया से चर निर्यात करने के लिए! फोर्क के साथ बनाई गई बाल प्रक्रियाएं, वर्तमान प्रक्रियाओं की पर्यावरण परिभाषाओं का उत्तराधिकारी होंगी, इस प्रकार आपके परिवर्तन और परिवर्धन भी।

0
यहाँ

setenv समारोह के लिए हस्ताक्षर

#include <stdlib.h> 

पूर्णांक setenv (स्थिरांक चार * envname, स्थिरांक चार * envval, पूर्णांक अधिलेखित);

लिंक: http://pubs.opengroup.org/onlinepubs/009695399/functions/setenv.html

अपने मामले में आप इसे इस तरह फोन में:

setenv("ROS_HOSTNAME", "xxx", true); 

पिछले बूलियन तर्क को इंगित करता है अगर आप वातावरण चर का मान ओवरराइट अगर यह पहले से मौजूद है चाहता हूँ।

0

इस पसंद है:

setenv("ROS_HOSTNAME", "xxx", true); 

नोट यह सार है और साथ ही:

#include <stdlib.h> 

int setenv(const char *envname, const char *envval, int overwrite); 

अधिक जानकारी के लिए this link देखें setenv() पर।

संबंधित मुद्दे