لماذا لا إزار بلدي في جميع أنحاء ابق ضاغطا () العمل؟
سؤال
ولدي الأسلوب أدناه، وذلك بشكل صحيح بتعيين قيمة أرجع إلى 0 (تشير إلى النجاح في ابق ضاغطا)، ولكن عندما تحقق لمعرفة ما إذا تم تعيين متغير البيئة هذا في الواقع، انها غائبة. لماذا هذا أن يحدث؟
void Class::mysetenv(char* a, char* b)
{
if(a==0 || b==0)
return;
int ret = setenv(strdup(a), strdup(b), 1);
printf("ret: %d %s %s\n", ret, a, b);
}
المحلول
وظيفة الخاص بك التسريبات. وmanpage من setenv
يقول:
وهذه وظيفة يجعل نسخ من سلاسل أشار إلى بالاسم والقيمة
اقتباس فقرة>وهكذا لم يكن لديك لنسخها نفسك قبل تمريرها إلى ذلك.
هل تنفيذ البرنامج مثل هذا من داخل وعاء؟
./a.out FOO 42
حسنا، ثم سيتم تعيين متغير البيئة لعملية تنفيذ ذلك (a.out
)، وتكون موروثة لعمليات أطلقها عليه. ولكنها لن "فقاعة يصل" في قذيفة التي نفذت a.out
. وهذا هو أيضا السبب أوامر مثل set
أو export
هي قذيفة بنيت الإضافية بدلا من البرامج الحقيقية. الخروج "مساعدة التصدير" في باش.
لا تنتمي إلى StackOverflow