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