لماذا لا إزار بلدي في جميع أنحاء ابق ضاغطا () العمل؟

StackOverflow https://stackoverflow.com/questions/662466

  •  20-08-2019
  •  | 
  •  

سؤال

ولدي الأسلوب أدناه، وذلك بشكل صحيح بتعيين قيمة أرجع إلى 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 هي قذيفة بنيت الإضافية بدلا من البرامج الحقيقية. الخروج "مساعدة التصدير" في باش.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top