c 언어/c 표준 라이브러리(Standard C Library)

C 언어에서 환경 변수 다루기 (getenv, putenv, setenv, unsetenv)

임베디드 친구 2025. 2. 24. 12:27
728x90
반응형

C 언어에서 환경 변수 다루기 (getenv, putenv, setenv, unsetenv)

환경 변수(Environment Variable)는 운영체제에서 제공하는 전역 변수로, 프로그램이 실행되는 환경에 대한 정보를 저장하는 역할을 합니다. C 언어에서는 getenv, putenv, setenv, unsetenv 등의 표준 라이브러리 함수를 이용하여 환경 변수를 조회, 추가, 수정, 삭제할 수 있습니다.

이번 포스팅에서는 각 함수의 동작 방식과 예제 코드를 살펴보겠습니다.


1. 환경 변수란?

환경 변수는 운영체제에서 제공하는 전역 변수로, 프로세스가 실행되는 환경을 설정하는 중요한 요소입니다. 환경 변수는 다음과 같은 정보들을 포함할 수 있습니다.

  • 사용자 홈 디렉터리 (HOME)
  • 실행 파일 검색 경로 (PATH)
  • 현재 사용자의 이름 (USER 또는 USERNAME)
  • 쉘 종류 (SHELL)

C 프로그램에서는 getenv를 이용하여 환경 변수를 조회하고, putenv, setenv, unsetenv를 이용하여 환경 변수를 추가, 수정, 삭제할 수 있습니다.


2. getenv: 환경 변수 값 조회

getenv 함수는 환경 변수의 값을 조회할 때 사용됩니다.

함수 프로토타입

#include <stdlib.h>
char *getenv(const char *name);

반환값

  • 환경 변수 name이 존재하면 해당 변수의 값을 문자열 포인터로 반환합니다.
  • 존재하지 않으면 NULL을 반환합니다.

예제 코드

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

int main() {
    char *path = getenv("PATH");
    if (path) {
        printf("PATH: %s\n", path);
    } else {
        printf("환경 변수를 찾을 수 없습니다.\n");
    }
    return 0;
}

위 코드를 실행하면 PATH 환경 변수에 설정된 값이 출력됩니다.


3. putenv: 환경 변수 추가 또는 변경

putenv 함수는 환경 변수를 추가하거나 기존 값을 변경할 때 사용됩니다.

함수 프로토타입

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

반환값

  • 성공하면 0, 실패하면 -1을 반환합니다.

주의사항

  • putenv는 입력 문자열을 직접 환경 변수 테이블에 추가하므로, 문자열이 변경되면 환경 변수도 변경될 수 있습니다.

예제 코드

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

int main() {
    putenv("MY_VAR=HelloWorld");
    char *value = getenv("MY_VAR");
    if (value) {
        printf("MY_VAR: %s\n", value);
    }
    return 0;
}

위 코드를 실행하면 MY_VAR 환경 변수가 추가되고, getenv로 조회할 수 있습니다.


4. setenv: 환경 변수 설정

setenv 함수는 환경 변수를 설정하거나 수정할 때 사용됩니다.

함수 프로토타입

#include <stdlib.h>
int setenv(const char *name, const char *value, int overwrite);

매개변수

  • name: 설정할 환경 변수 이름
  • value: 환경 변수에 저장할 값
  • overwrite: 0이면 기존 변수가 존재할 경우 변경하지 않음, 1이면 덮어씀

반환값

  • 성공하면 0, 실패하면 -1을 반환합니다.

예제 코드

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

int main() {
    setenv("MY_VAR", "NewValue", 1);
    printf("MY_VAR: %s\n", getenv("MY_VAR"));
    return 0;
}

위 코드를 실행하면 MY_VAR 환경 변수가 설정되며, 기존 값이 있다면 덮어씁니다.


5. unsetenv: 환경 변수 삭제

unsetenv 함수는 특정 환경 변수를 삭제할 때 사용됩니다.

함수 프로토타입

#include <stdlib.h>
int unsetenv(const char *name);

반환값

  • 성공하면 0, 실패하면 -1을 반환합니다.

예제 코드

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

int main() {
    setenv("MY_VAR", "ToBeDeleted", 1);
    printf("Before unsetenv: %s\n", getenv("MY_VAR"));

    unsetenv("MY_VAR");
    printf("After unsetenv: %s\n", getenv("MY_VAR"));
    return 0;
}

위 코드를 실행하면 MY_VAR 환경 변수가 삭제됩니다.


6. 환경 변수 조작 주의사항

  1. 영향 범위: 환경 변수는 현재 프로세스와 자식 프로세스에만 영향을 미칩니다.
  2. 보안 문제: 환경 변수를 조작할 때, 악의적인 값이 설정되지 않도록 주의해야 합니다.
  3. 메모리 관리: putenv는 문자열을 직접 저장하므로 메모리 누수에 주의해야 합니다.

7. 환경 변수 전체 목록 출력

환경 변수 전체를 확인하려면 environ 변수를 사용할 수 있습니다.

예제 코드

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

extern char **environ;

int main() {
    char **env = environ;
    while (*env) {
        printf("%s\n", *env);
        env++;
    }
    return 0;
}

이 코드를 실행하면 현재 설정된 모든 환경 변수가 출력됩니다.


8. 정리

함수명 역할
getenv 환경 변수 값 조회
putenv 환경 변수 추가 및 변경
setenv 환경 변수 설정 (기존 값 덮어쓰기 가능)
unsetenv 환경 변수 삭제

환경 변수는 프로그램 실행 환경을 설정하는 중요한 요소이므로, 위 함수들을 적절히 활용하여 환경 변수를 관리할 수 있습니다.

이제 환경 변수를 다루는 방법을 익혔으니, 직접 실습하면서 익혀보세요!

반응형