ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C/C++ putenv(3)
    C,C++ & Linux 2020. 5. 22. 22:28
    728x90

    함수 기능

    환경 변수에 값을 추가하는 함수

    프로세스가 종료되면 추가됐던 환경변수들은 자동으로 삭제됩니다.

     

    함수 원형

    #include <stdlib.h>
    
    int putenv(const char *str);

     

    매개변수

    str

    환경변수에 추가할 문자열

    환경변수는 "이름=값"의 형태로 이루어져야합니다.

     

    반환값

    성공 시 0 리턴

    에러 시 0이 아닌 정수를 리턴하고 errno 설정

    예제

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    
    extern char **environ;
    char glob_var[] = "HOBBY=swimming";
    
    void ssu_addone() {
        char str[10];
    
        // 지역변수를 환경변수에 추가
        strcpy(str, "LOVER=js");
        putenv(str);
    }
    
    int main(int argc, char *argv[], char *envpp[]) {
        for (int i = 0; environ[i] != NULL; i++) 
            printf("environ[%d] : %s\n", i, environ[i]);
    
        // 전역변수를 환경변수에 추가
        putenv(glob_var);
    
        // 지역변수를 환경변수에 추가
        ssu_addone();
    
        // 이후 각 환경변수를 출력해보면 전역변수로 등록한 HOBBY는 잘 뜸
        printf("My hobby is %s\n", getenv("HOBBY"));
    
        // 하지만 지역변수로 등록한 LOVER는 뜨지 않음
        printf("My lover is %s\n", getenv("LOVER"));
    
    
        // 전역변수더라도 문자열을 조작하게되면 환경변수 자체도 변함
        // 즉 내부적으로 strcpy 하여 환경변수에 복사 저장하는 것이 아니라
        // 단순 주소값만 저장한다는 것을 알 수 있음
        strcpy(glob_var + 6, "fishing");
    
        for (int i = 0; environ[i] != NULL; i++)
            printf("environ[%d] : %s\n", i, environ[i]);
    
        exit(0);
    }
    

     

    결과

    lover 는 안뜨는 결과

     

     

     

     

     

     

     

     

    리눅스시스템프로그래밍 저자 : 홍지만
    https://book.naver.com/bookdb/book_detail.nhn?bid=14623672

    책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)

    'C,C++ & Linux' 카테고리의 다른 글

    C/C++ setjmp(3) longjmp(3)  (0) 2020.05.23
    C/C++ setenv(3) unsetenv(3)  (0) 2020.05.23
    C/C++ getenv(3)  (0) 2020.05.22
    C/C++ free(3)  (0) 2020.05.22
    C/C++ realloc(3)  (0) 2020.05.22

    댓글

Designed by Tistory.