2012. 7. 13. 16:01

현재 설정되어 있는 환경 변수 출력1

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

/* envp에 환경 변수 정보 저장 */
main(int argc, char *argv[], char *envp[])
{
   while(*envp)
      printf("%s\n", *envp++);
}

-------------------------------------------------------------------------------

현재 설정되어 있는 환경 변수 출력2

#include <stdio.h>
#include <stdlib.h>   /* environ 변수를 선언하는 헤더 파일 */

/* environ에 환경 변수 정보 저장 */
extern char **environ;

main()
{
   while(*environ)
      printf("%s\n", *environ++);
}

-------------------------------------------------------------------------------

환경변수 HOME,PWD,LINUX에 대한 값을 가져와서 출력하는 프로그램

#include <stdio.h>
#include <stdlib.h>   /* getenv 함수를 정의하는 헤더 파일 */

main()
{
   char *home_dir, *work_dir;

   /* getenv를 이용해 HOME에 대한 환경 변수 값 얻어 옴 */
   if((home_dir=getenv("HOME")) != NULL)
      printf("home directory : %s\n", home_dir);

   /* getenv를 이용해 PWD에 대한 환경 변수 값 얻어 옴 */
   if((work_dir = getenv("PWD")) != NULL)
      printf("working directory : %s\n", work_dir);

   /* LINUX라는 환경 변수가 없으므로 NULL을 반환 */
   if((tmp = getenv("LINUX")) != NULL)
      printf("temp : %s\n", tmp);
}

-------------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>   /* getenv, putenv 함수를 정의하는 헤더 파일 */

main()
{
   char *home_dir;

   /* HOME 환경 변수 값을 얻어 와서 출력 */
   if((home_dir=getenv("HOME")) != NULL)
      printf("home directory : %s\n", home_dir);

   /* HOME 환경 변수 값을 /home/jkim/book/linux로 설정 */
   putenv("HOME=/home/jkim/book/linux");

   if((home_dir=getenv("HOME")) != NULL)
      printf("home directory : %s\n", home_dir);
}

-------------------------------------------------------------------------------

명령라인 인수가 두개면 해당환경 변수 값을 출력하고 다음과 같이 인수가 세개면

[~~localhost]# a.out HOME /home/kweun001/book/linux

변수값을 출력하고 새로운 값으로 설정하고 다시 출력

#include <stdio.h>
#include <stdlib.h>   /* getenv, setenv 함수를 정의하는 헤더 파일 */
#include <string.h>   /* strcpy, strcat 함수를 정의하는 헤더 파일 */

main(int argc, char *argv[])
{
   char *value, *string;

   if(argc==1 || argc>3) {
      printf("Usage : a.out variable [value]\n");
      exit(1);
   }

   /* argv[1] 환경 변수 값을 얻어 와서 출력 */
   if((value=getenv(argv[1])) != NULL)
      printf("%s : %s\n", argv[1], value);
   else
      printf("%s : no value\n", argv[1]);

   /* 명령라인 인수가 3개면 */
   if(argc == 3) {
      /* 메모리를 동적으로 할당 받음 */
      string = malloc(strlen(argv[1])+strlen(argv[2])+2);
      /* argv[1]을 string에 복사 */
      strcpy(string, argv[1]);
      /* string 뒤에 ‘=’을 연결 */
      strcat(string, "=");
      strcat(string, argv[2]);

      /* 환경 변수 값을 변경 */
      putenv(string);

      /* 변경된 환경 변수 값을 얻어 와서 출력 */
      if((value=getenv(argv[1])) != NULL)
         printf("%s's new value : %s\n", argv[1], value);
      else
         printf("error : %s\n", string);      
   }
   exit(0);
}

-------------------------------------------------------------------------------

setenv를 이용해 환경 변수값을 변경하는 프로그램

#include <stdio.h>
#include <stdlib.h>   /* setenv, getenv 함수를 정의하는 헤더 파일 */

main()
{
   char *value;

   /* overwrite가 0이므로 이미 HOME이 존재하면 변경하지 않음 */
   setenv("HOME", "/home/jkim/book/linux", 0);
   value = getenv("HOME");
   printf("[setenv overwrite : 0] HOME : %s\n", value);

   /* overwrite가 1이므로 이미 HOME이 존재해도 값을 변경 */
   setenv("HOME", "/home/jkim/book/linux", 1);
   value = getenv("HOME");
   printf("[setenv overwrite : 1] HOME : %s\n", value);

   exit(0);
}

-------------------------------------------------------------------------------

unsetenv함수를 이용하여 환경 변수 자체를 삭제하는 프로그램

#include <stdio.h>
#include <stdlib.h>   /* getenv, unsetenv 함수를 정의하는 헤더 파일 */

main()
{
   char *value;

   if((value=getenv("HOME")) != NULL)
      printf("HOME : %s\n", value);
   else
      printf("HOME : no value\n");

   /* HOME 환경 변수를 삭제 */
   unsetenv("HOME");

   /* HOME 환경 변수 없으므로 NULL 반환 */
   if((value=getenv("HOME")) != NULL)
      printf("HOME : %s\n", value);
   else
      printf("HOME : no value\n");

   exit(0);
}

-------------------------------------------------------------------------------

Posted by 몰라욧