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. 환경 변수 조작 주의사항
- 영향 범위: 환경 변수는 현재 프로세스와 자식 프로세스에만 영향을 미칩니다.
- 보안 문제: 환경 변수를 조작할 때, 악의적인 값이 설정되지 않도록 주의해야 합니다.
- 메모리 관리:
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 |
환경 변수 삭제 |
환경 변수는 프로그램 실행 환경을 설정하는 중요한 요소이므로, 위 함수들을 적절히 활용하여 환경 변수를 관리할 수 있습니다.
이제 환경 변수를 다루는 방법을 익혔으니, 직접 실습하면서 익혀보세요!
'c 언어 > c 표준 라이브러리(Standard C Library)' 카테고리의 다른 글
C 표준 API 프로그램 종료 및 반환값 (atexit, quick_exit) (0) | 2025.02.26 |
---|---|
C 표준 API: 시스템 호출 및 종료 (system, exit, abort) (0) | 2025.02.25 |
C 언어 표준 API - time.h의 시간 변환 및 포맷팅 (strftime, gmtime, localtime) (0) | 2025.02.23 |
C time.h 개요 및 시간 관련 함수 (0) | 2025.02.22 |
C math.h의 절댓값 및 기타 함수 설명 (0) | 2025.02.21 |