Linux2009.08.03 11:47
SETENV(3)                  Linux Programmer’s Manual                 SETENV(3)

NAME
       setenv - change or add an environment variable

SYNOPSIS
       #include <stdlib.h>

       int setenv(const char *name, const char *value, int overwrite);

       int unsetenv(const char *name);

DESCRIPTION
       The  setenv()  function  adds the variable name to the environment with the value value, if name does not already
       exist.  If name does exist in the environment, then its value is changed to value if overwrite  is  non-zero;  if
       overwrite is zero, then the value of name is not changed.

       The unsetenv() function deletes the variable name from the environment.

RETURN VALUE
       The  setenv()  function  returns  zero on success, or -1 if there was insufficient space in the environment.  The
       unsetenv() function returns zero on success, or -1 on error, with errno set to indicate the cause of the error.

ERRORS
       EINVAL name contained an ’=’ character.

CONFORMING TO
       4.3BSD, POSIX.1-2001.

NOTES
       Prior to glibc 2.2.2, unsetenv() was prototyped  as  returning  void;  more  recent  glibc  versions  follow  the
       POSIX.1-2001-compliant prototype shown in the SYNOPSIS.

BUGS
       POSIX.1-2001  specifies  that if name contains an ’=’ character, then setenv() should fail with the error EINVAL;
       however, versions of glibc before 2.3.4 allowed an ’=’ sign in name.

SEE ALSO
       clearenv(3), getenv(3), putenv(3), environ(7)

BSD                               2004-05-09                         SETENV(3)


환경변수를 바꾸어 보려고 했더니, 프로그램 종료 후에는 그 환경변수를 사라지는 문제가 발생했다.
혹시나 해서 찾아 봤더니 원래 그렇다고 한다.
음.. 고정시키는 방법은 없을려나..

고정 시키려면  직접적으로 할 수는 없고, 스크립트를 하나 만들어 실행시키는 방법외에는 없다고 한다.

[링크 : http://kldp.org/node/88770]


그리고, setenv() 사용시, 변수 치환은 되지 않는다.
예를 들어 A=str B=test 로 선언하고
setenv("C","$A $B",1) 라고 해도 C=str test 로 입력되지 않는다.

[링크 : http://forum.falinux.com/zbxe/?document_srl=408397]
Posted by 구차니

댓글을 달아 주세요

  1. 음...고정 시키는 방법은요...흠...흠...음...

    2009.08.03 13:24 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 찾아보니 간단하게 C 레벨에서 할 수 있는 방법은 없는거 같아요 ㅠ.ㅠ 거의 스크립트를 wrapping 하라는 대답뿐이네요

      2009.08.03 13:36 신고 [ ADDR : EDIT/ DEL ]
  2. 요술뱃살

    1년 전에 작성하신 글이군요. 유용하게 참고하고 갑니다.

    2010.10.25 21:26 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 1년 전이라고 하니 무지 오래된 느낌이네요 ㅎ
      시간이 참 빨리가는군요 ^^;

      2010.10.26 08:48 신고 [ ADDR : EDIT/ DEL ]