C,C++ & Linux

C/C++ putenv(3)

KyooDong 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

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