2013-02-25 4 views
-2

C 프로그램에서 $ PATH를 변경하려고합니다. 이 코드 다음에는 PATH 변수를 인쇄 할 때 그대로 유지됩니다. 여기 내 접근,C에서 환경 변수 설정

char path[100]="PATH="; 
    char *input = "/newfolder/hello/"; 
    putenv(strcat(path, input)); 

내가 다시 에코 $ 경로를 사용하여 그것을 인쇄하려고하고 변경되지 않습니다 같이 여전히, 이전 경로를 보여주고있다.

+1

동일한 프로세스 내에서 'echo $ PATH'를 사용할 수 없습니다. 정확히 무슨 소리를하는거야? – EJP

답변

6

설정 한 후에 환경 변수를 가져 오는 방법을 알려주십시오.

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char path[100]="PATH="; 
    char *input = "/newfolder/hello/"; 
    putenv(strcat(path, input)); 

    char* pPath; 
    pPath = getenv("PATH"); 

    printf("%s", pPath); 

    return 0; 
} 

출력은 다음과 같습니다 : 예상대로 은 나를 위해 일하는 다음과 같은 C 코드를 가지고 내가 에코 $ 경로를 사용하여 다시 인쇄하려고 /newfolder/hello/

하고 여전히 이전을 보여줍니다 경로는 변경되지 않으므로 이 명령이 실행 여전히 데 쉘 과정에서 평가되기 때문에, 그런 다음 당신은 당신이 설정 한 그 값을 얻을 수 없겠죠

system("echo $PATH"); 

:

는 같은 프로그램 무언가에 사용 초기 환경 변수 설정 값.

+0

나는 내 자신의 쉘을 만들고 echo $ PATH를 호출하고 여전히 이전 값을 인쇄합니다. – markfiel

+0

@ user2098078 그러면 잘못 작성하는 것입니다. 'echo $ PATH'에 대한 코드에 문제가 있습니다. 이것은 진짜 질문이 아닙니다. 귀하의 논쟁은이 답변으로 완전히 반증됩니다. – EJP

+0

echo $ PATH는 적절한 이전 값을 출력하고, putenv를 사용하여 그것을 바꾼 후에 다시 출력합니다. – markfiel

2

프로세스를 시작하면 프로세스가 부모 환경의 사본을 얻습니다. 프로그램이 끝나면 사라지는 복사본을 변경하고 있습니다.

+0

동일한 프로그램 내에서 인쇄 중입니다. 일단 C 프로그램을 닫으면 영구적으로 변경되지는 않겠지 만 당분간 나는 그것을 변경하고 인쇄합니다. 그것은 변경되지 않습니다. 나는 아직도 전 PATH를 본다. – markfiel

+0

동일한 프로그램 내에서 인쇄하는 방법은 무엇입니까? – EJP

+0

@EJP 쉘을 만들고 쉘에서 echo $ PATH 또는 echo PATH를 호출하면 PATH 변수가 출력됩니다. – markfiel

2

putenv()은 실행중인 프로세스의 환경 만 변경합니다. 호출 프로세스 (셸)의 환경을 변경할 수 없습니다.

+0

나는 그것을 재 인쇄 할 때 그 환경 안에서 그것을 알지 못한다. – markfiel