Setenv () 주변의 래퍼가 작동하지 않는 이유는 무엇입니까?

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

  •  20-08-2019
  •  | 
  •  

문제

아래에 방법이 있으며 Ret 값을 0으로 올바르게 설정하지만 (SetEnV에서 성공을 나타냅니다),이 환경 변수가 실제로 설정되어 있는지 확인하면 결석이 없습니다. 왜 이런 일이 일어날까요?

 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);                          
     }
도움이 되었습니까?

해결책

기능이 누출됩니다. 의 인력 setenv 말 :

이 기능은 문자열의 사본을 이름과 가치로 지적합니다.

따라서 전달하기 전에 직접 복사 할 필요는 없습니다.

쉘 내에서 이와 같은 프로그램을 실행합니까?

./a.out FOO 42

그렇다면 환경 변수는 실행 된 프로세스에 대해 설정됩니다 (a.out), 그것에 의해 시작된 프로세스에 상속됩니다. 그러나 그것은 실행 된 껍질로 "거품을"하지 않을 것입니다. a.out. 그것이 또한 명령이 다음과 같은 이유이기도합니다 set 또는 export 실제 프로그램이 아닌 쉘 내장입니다. Bash에서 "도움말 수출"체크 아웃.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top