À¯´Ð½º ȯ°æ º¯¼ö
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : article>unixenv



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
  1. HTMLÆ÷¸ËÀ» wikiÆ÷¸ËÀ¸·Î º¯°æ
  2. main()ÀÇ ÀÎÀڷΠȯ°æº¯¼ö °¡Á®¿À´Â ¹æ¹ý Ãß°¡

ȯ°æº¯¼ö´Â ½ÇÇà ÇÁ·Î±×·¥µé¿¡ ¿î¿µÃ¼Á¦(12) ÀÇ È¯°æ°ú ½ÇÇà ÇÁ·Î±×·¥ÀÇ È¯°æÀ» ¾Ë·ÁÁÖ±â À§Çؼ­ ÁÖ·Î »ç¿ëµÈ´Ù. ÀÌ·¯ÇÑ È¯°æº¯¼ö´Â shell ¿¡¼­ set ¸í·ÉÀ» ÀÌ¿ëÇØ¼­ È®Àΰ¡´ÉÇÏ´Ù.
[yundream@localhost test]$ set 
HOME=/home/yundream 
BASH=/bin/bash 
LANG=en_US 
TERM=xterm-color 
LD_LIBRARY_PATH=/usr/local/lib:/usr/local/mysql/lib 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin 
.... 
 

½©»ó¿¡¼­ echo ¸í·É¾î¸¦ ÅëÇØ¼­µµ °¡´ÉÇÏ´Ù.
[yundream@localhost test]$ echo $HOME 
/home/yundream 
 
À§ÀÇ È¯°æº¯¼öµéÀÌ ¼¼ÆÃµÇ¾î Àֱ⠶§¹®¿¡, ÇØ´ç ÇÁ·Î±×·¥µéÀº ÇöÀç »ç¿ëÀÚ°¡ ¾î¶² Å͹̳ÎÀ» »ç¿ëÇÏ´ÂÁö, ¾î¶² ¾ð¾îȯ°æÀÎÁö, ½ÇÇàÇÁ·Î±×·¥À» ã±â À§Çؼ­ ¾î¶² µð·ºÅ丮¸¦ °Ë»öÇØ¾ß ÇÏ´ÂÁö¸¦ ¾Ë¼ö ÀÖ°Ô µÈ´Ù. ÀÌ·¯ÇÑ È¯°æº¯¼öÀÇ Á¶ÀÛÀº setenv(3), getenv(3), putenv(3) ¸¦ ÅëÇØ¼­ ÀÌ·ç¾îÁø´Ù.
#include <string.h>                                                             
#include <stdio.h>                                                             
#include <stdlib.h>                    
#include <unistd.h>                                                              
                                                                                 
#define LOG_FILE_NAME "my.dump"                                                  
int main(int argc, char **argv) 
{ 
    char *tmp_dir; 
    char log_file[30]; 
    char *my_env; 
 
    int  fd; 
    if ((tmp_dir = getenv("TMP_DIR")) ==NULL) 
    { 
        printf("TMP_DIR ÀÌ ¼¼ÆÃµÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù\n"  
               "TMP_DIR ¸¦ ¸ÕÀú ¼¼ÆÃÇÏ¼Å¾ß ÇÕ´Ï´Ù\n"); 
        exit(0); 
    } 
 
    memset(log_file, '\0', 30); 
    sprintf(log_file, "%s/%s", tmp_dir, LOG_FILE_NAME); 
    printf("log_file is %s\n", log_file); 
 
    printf("your home directory is %s\n", getenv("HOME")); 
 
    my_env = (char *) malloc(40); 
    memset(my_env, '0', 40); 
 
    sprintf(my_env, "%s=%s", "USER_ENV", "hello yundream"); 
 
    putenv("TEST_ENV=hello world"); 
    putenv(my_env); 
    printf("¿©±â¿¡¼­ ºÎÅÍ´Â execl\n"); 
 
    execl("/bin/sh","sh",0); 
} 
 

À§ÀÇ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ ÇØ¼­ ½ÇÇà½ÃÄÑ º¸ÀÚ. óÀ½¿¡ ½ÇÇà½Ã۸é,
TMP_DIR ȯ°æº¯¼ö¸¦ °Ë»çÇØ¼­ ÀÌ °ªÀÌ ¼¼ÆÃµÇ¾î ÀÖÁö ¾ÊÀ¸¸é ¿¡·¯¸Þ½ÃÁö¸¦
º¸³»°í ÇÁ·Î±×·¥ÀÌ Á¾·áµÇµµ·Ï µÇ¾î ÀÖ´Ù. ±×·¯¹Ç·Î ¸ÕÀú TMP_DIRÀ» ¼¼ÆÃÇØ ÁÖ¾î¾ß
ÇÑ´Ù.

bash ½©À̶ó¸é
[yundream @localhost test]$ export TMP_DIR="/tmp" 
 

csh ½©À̶ó¸é
[yundream @localhost test]$ setenv TMP_DIR="/tmp" 
 
·Î ¼³Á¤ÇÒ¼ö ÀÖ´Ù. ȯ°æº¯¼ö TMP_DIR ÀÇ ¼³Á¤À» ¸¶Ä¡°í ÇÁ·Î±×·¥À» ½ÇÇàÇϸé, setenv ¸¦ ÅëÇØ¼­ ȯ°æº¯¼ö TMP_DIR ÀÇ ³»¿ë°ú HOME ÀÇ ³»¿ëÀ» Á¦´ë·Î °¡Á®¿ÈÀ» º¼¼ö ÀÖÀ»°ÍÀÌ´Ù.

±×¸®°í putenv() ¸¦ ÀÌ¿ëÇØ¼­ »õ·Î¿î ȯ°æº¯¼ö¸¦ ¼³Á¤Çß´Ù. putenv ÀÇ »ç¿ë¹ýÀº
½©¿¡¼­ ó·³ º¯¼ö¸í=°ª ÀÇ Çü½ÄÀ¸·Î ¼³Á¤ÇϸéµÈ´Ù. ÁÖÀÇ ÇÒÁ¡Àº putenv() ¿¡ °ªÀ» ÀÔ·ÂÇÒ¶§, char * ÇüÀϰæ¿ì ¹Ýµå½Ã ¸Þ¸ð¸® ÇÒ´çÀ» ÇÑ °ªÀ»
ÀÔ·ÂÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù.

putenv ¸¦ ¸¶Ä¡°í ³ª¸é execl ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ »õ·Î ½©À» ¶ç¿î´Ù. »õ·Î ¶á ½©¿¡¼­ echo $USER_ENV, echo $TEST_ENV ¸í·ÉÀ» »ç¿ëÇØ º¸¸é putenv ¸¦ ÅëÇÑ È¯°æ ¼³Á¤ÀÌ Á¦´ë·Î Àû¿ëµÇ¾úÀ½À» ¾Ë¼ö ÀÖÀ»°ÍÀÌ´Ù. ±×·¯³ª exit ¸¦ ÅëÇØ¼­ ¿ø·¡ ½©·Î µÇµ¹¾Æ¿Â ´ÙÀ½¿¡ echo ¸¦ ÀÌ¿ëÇØº¸¸é USER_ENV, TEST_ENV ÀÇ °ªÀÌ Ãâ·ÂµÇÁö ¾ÊÀ½À» º¸°Ô µÉ°ÍÀÌ´Ù.

putenv ¿Í setenv ¸¦ ÅëÇØ¼­ ¼³Á¤µÈ ȯ°æº¯¼ö´Â ÇöÀçÇÁ·Î±×·¥°ú ±× ÇÁ·Î±×·¥¿¡¼­ ÆÄ»ýµÈ(fork ȤÀº exel µÈ) ÇÁ·Î±×·¥¿¡¸¸ Àû¿ëµÇ±â ¶§¹®ÀÌ´Ù.

ȯ°æº¯¼ö¸¦ Á¦´ë·Î »ç¿ëÇϸé ÇÁ·Î±×·¥ÀÇ ÀÛ¼ºÀÌ ¸Å¿ì °£ÆíÇØÁüÀ» ¾Ë¼ö ÀÖ´Ù. ¸Å¹ø º¹ÀâÇÏ°Ô ÇÁ·Î±×·¥ÀÇ Àμö·Î ÇÁ·Î±×·¥À» ÀÛµ¿½Ã۴µ¥ ÇÊ¿äÇÑ °¢Á¾ ¼³Á¤À» ÀÔ·ÂÇÒ Çʿ䵵 ¾ø°í, ÇÁ·Î±×·¡¹Ö Çϱ⠰ï¶õÇÑ ¼³Á¤ÆÄÀÏÀ» ÆÄ½ÌÇÏ´Â ·çƾÀ» ¸¸µéÇʿ䵵 ¾ø±â ¶§¹®ÀÌ´Ù.

´ÜÁ¡Àº ÇÁ·Î±×·¥ÀÇ »ç¿ëÀÚ¿¡°Ô »ç¿ë»óÀÇ È¥¶õÀ» ÁÙ¼ö°¡ ÀÖ´Ù´Â Á¡°ú, ȯ°æº¯¼öÀÇ Æ¯¼º»ó, ÇØ´çȯ°æº¯¼ö¸¦ 100% ½Å·ÚÇÒ¼ö ¾ø´Ù¶ó´Â ¹®Á¦°¡ ±×°ÍÀÌ´Ù. ¹°·Ð ÀüÀÚÀÇ °æ¿ì´Â »ç¿ëÀÚ¿¡°Ô ¸Þ´º¾óÀ» ¼÷ÁöÇÒ¼ö ÀÖµµ·ÏÇØÁÖ¸é µÇ°í (¿À¶óŬÀ» ¼³Ä¡ÇÒ°æ¿ìµµ ¿ì¸®´Â ¿À¶óŬ ¼³Ä¡¿¡ ÇÊ¿äÇÑ ¸¹Àº ȯ°æ¼³Á¤À» À§Çؼ­ ¸Þ´º¾óÀ» ¼÷ÁöÇØ¾ß ÇÑ´Ù). ÈÄÀÚÀÇ °æ¿ìµµ À̷лó 100% ½Å·ÚÇÒ¼ö ¾ø´Ù¶ó´Â °ÍÀ̰í, ¾à°£¸¸ ÁÖÀǸ¦ ±â¿ïÀÎ´Ù¸é ¹®Á¦ ¹ß»ýÀÇ ¿©Áö´Â °ÅÀÇ ¾ø´Ù°í ÇÒ¼ö ÀÖ´Ù.

ȯ°æº¯¼ö´Â ÇÁ·Î¼¼½ºÀÇ ½ºÅÿµ¿µ¿¡ ÀúÀåµÇµÇ°í, putenv(), getenv()´Â ½ºÅÿµ¿µ¿¡ ´ëÇÑ »ç¿ëÀÚ ·¹º§¿¡¼­ÀÇ Á¦¾î¸¦ °¡´ÉÇϵµ·Ï µµ¿ÍÁØ´Ù. À̿ܿ¡µµ Á»´õ ³·Àº ¼öÁØ¿¡¼­ ȯ°æº¯¼ö¸¦ ÀÐ¾î ¿Ã ¼ö Àִµ¥, main()ÇÔ¼öÀÇ 3¹øÂ° ÀÎÀÚ¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. main()ÇÔ¼öÀÇ 3¹øÂ° ÀÎÀڴ ȯ°æº¯¼ö°¡ ÀúÀåµÈ ÁÖ¼Ò¸¦ °¡¸£Å°¸ç, ¿ì¸®´Â ÀÌ Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇØ¼­ ȯ°æº¯¼ö¸¦ ¾ò¾î¿Ã ¼ö ÀÖ´Ù. ´ÙÀ½Àº °£´ÜÇÑ ¿¹Á¦ ÄÚµå´Ù
#include <unistd.h> 
#include <stdio.h> 
 
int main(int argc, char **argv, char **env) 
{ 
    while(*env) 
    { 
        printf("%s\n", *env); 
        env++; 
    } 
} 
 
À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù. °á°ú´Â ¹°·Ð ½Ã½ºÅÛ¿¡ µû¶ó¼­ ´Þ¶óÁú ¼ö ÀÖ´Ù.
[root@yundream test]# ./env  
SSH_AGENT_PID=997 
KDE_MULTIHEAD=false 
HOSTNAME=yundream 
TERM=xterm 
SHELL=/bin/bash 
DESKTOP_STARTUP_ID=yundream;1079054007;831298;1040 
HISTSIZE=1000 
GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/root/.gtkrc-2.0:/root/.kde/share/config/gtkrc 
GS_LIB=/root/.fonts 
GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc:/root/.kde/share/config/gtkrc 
WINDOWID=62914580 
OLDPWD=/root 
QTDIR=/usr/lib/qt-3.2 
KDE_FULL_SESSION=true 
USER=root 
.... 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.