-
C/C++ putenv(3)C,C++ & Linux 2020. 5. 22. 22:28728x90
함수 기능
환경 변수에 값을 추가하는 함수
프로세스가 종료되면 추가됐던 환경변수들은 자동으로 삭제됩니다.
함수 원형
#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