rosieblue
article thumbnail
728x90

์˜ค๋Š˜ ๋‹ค๋ฃฐ ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ๋ช…๋ น์–ด ํ–‰ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ฒ˜๋ฆฌ
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ์ฒ˜๋ฆฌ

 

ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ฒ˜๋ฆฌ

UNIX์—์„œ๋Š” cli์— ์ž…๋ ฅํ•œ ๋ช…๋ น์–ด ์ด๋ฆ„, ์˜ต์…˜, ํŒŒ์ผ ๋“ฑ์„ main์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ค๋Š˜์€ ์ด๋ ‡๊ฒŒ cli์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๋ฒ•์˜ ๊ธฐ์ดˆ๋ฅผ ๋ฐฐ์›Œ๋ณด๊ฒ ๋‹ค.

 

int main(int argc, char* argv[])
// int argc; ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ˆ˜
// char* argv[]; ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด ๋ฐฐ์—ด

 

argc์™€ argv์˜ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

์˜ˆ๋ฅผ ๋“ค์–ด sample์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ํ•˜๊ณ  ๋’ค์— ์ธ์ž๋ฅผ ์ž…๋ ฅํ•ด์คฌ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž

sample aaa bbb ccc

์šฐ๋ฆฌ๊ฐ€ ๋ฆฌ๋ˆ…์Šค ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์–ด ๋’ค์— ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ๋™์ผํ•˜๋‹ค.

์ด ๊ฒฝ์šฐ argc=4, argv๋Š” ["sample","aaa","bbb","ccc",NULL]์ด๋ผ๋Š” ๋ฐฐ์—ด์ด ๋œ๋‹ค.

์ฃผ์˜ํ•  ๊ฒƒ์€ argv์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋Š” NULL์ด ๋œ๋‹ค๋Š” ์ ์ด๋‹ค.

 

 

argc, argv ์ˆœ์ฐจ์ ์œผ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ

 

[ ์ฝ”๋“œ ] 

 

for๋ฌธ์˜ argv[i]๋Š”, argv[i]!=NULL ์ผ ๋•Œ๊นŒ์ง€๋งŒ ์‹คํ–‰ํ•˜๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. argv์˜ ๋งจ ๋งˆ์ง€๋ง‰ ์›์†Œ๋Š” NULL์ด๋ฏ€๋กœ!!

์ด๋Š” i<argc ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ–๋Š”๋‹ค.

 

 

[ ์‹คํ–‰๊ฒฐ๊ณผ ]

 

 

 

ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ์ฒ˜๋ฆฌ

์œ„์—์„œ char* envp[]๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •๋ณด ๋˜ํ•œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ๊ด€๋ จ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ : [Linux] ํ™˜๊ฒฝ๋ณ€์ˆ˜์™€ ํ™˜๊ฒฝ๋ณ€์ˆ˜ PATH๋ž€? (+๋ช…๋ น์–ด๋ฅผ ์ฐพ๋Š” ๊ฒฝ๋กœ์™€ ์ ˆ์ฐจ, PATH ๊ณต๊ฒฉ)

int main(int argc, char* argv[], char* envp[])
// char envp* [] ; ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ฌธ์ž์—ด์˜ ๋ฐฐ์—ด

envp ๋˜ํ•œ ๋งจ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ NULL์ด์–ด์•ผ ํ•œ๋‹ค.

envp ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๊ฐ ์›์†Œ๋Š” "ํ™˜๊ฒฝ๋ณ€์ˆ˜์ด๋ฆ„=๋‚ด์šฉ" ์ด๋Ÿฐ์‹์œผ๋กœ ์ €์žฅ๋˜์–ด์žˆ๋‹ค!

 

 

envp[]๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ •๋ณด๋ฅผ ๋‹ค ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

envp๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์ž

 

[ ์ฝ”๋“œ ]

 

์œ„ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•œ ํ›„ ์‹คํ–‰ํ•˜๋‹ˆ export์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค. (export๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถœ๋ ฅํ•˜๋Š” ๋ช…๋ น์–ด)

 

๋„ˆ๋ฌด ๋งŽ์•„์„œ ์ž˜๋ž๋‹ค

 

getenv(), setenv()

#include <stdlib.h>
char *getenv(const char* name); //name์€ ์ฐพ๊ณ ์žํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ด๋ฆ„ ๋ฌธ์ž์—ด ex)SHELL

int setenv(const char* name,const char* value, int overwrite)
// const char* name; ์„ค์ •ํ•˜๊ณ  ์‹ถ์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ด๋ฆ„
// const char* value; ๋ณ€๊ฒฝ ํ˜น์€ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’
// int overwrite; (1์ด๋ฉด overwrite, 0์ด๋ฉด overwrite x)
// ์„ฑ๊ณตํ•˜๋ฉด 0, ์‹คํŒจํ•˜๋ฉด -1 ๋ฐ˜ํ™˜

getenv(ํ™˜๊ฒฝ๋ณ€์ˆ˜์ด๋ฆ„)๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ ,

setenv(ํ™˜๊ฒฝ๋ณ€์ˆ˜์ด๋ฆ„,๊ฐ’,overwrite๋น„ํŠธ)๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

setenv์—์„œ name์ด ๊ธฐ์กด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ฆฌ์ŠคํŠธ์— ์—†๋Š” ๊ฒฝ์šฐ ๊ทธ๋ƒฅ ์ถ”๊ฐ€๊ฐ€ ๋˜๊ณ , ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๊ฒฝ์šฐ overwrite ํ”Œ๋ž˜๊ทธ์— ๋”ฐ๋ผ ์„ค์ •์—ฌ๋ถ€๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

 

getenv๋กœ SHELL ๋ณ€์ˆ˜ ๊ฐ’์„ ๊ฐ€์ ธ์™”๊ณ , ์ด๋ฅผ setenv๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค. 

 

 

์ด์™ธ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ จ ํ•จ์ˆ˜๋“ค

  • putenv() - ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€
  • unsetenv() - ์ง€์ •ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ œ๊ฑฐ
  • clearenv() - ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ „๋ถ€๋ฅผ ์ œ๊ฑฐ

 

์ด์ฒ˜๋Ÿผ ์ฝ”๋“œ์ž‘์„ฑ๋งŒ์„ ํ†ตํ•ด ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์กฐ์‹ฌํ•ด์„œ ์‚ฌ์šฉํ•˜์ž

 

 

- ์œ„ ๊ธ€์€ UNIX ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ•์˜์˜ ๊ธ€์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

profile

rosieblue

@Rosieblue

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!