๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ผ์ƒ

#003. ์—ฌํ•œ์ด์—†๋‹ค

๐ŸŒฑ ์—ฌํ•œ์ด์—†๋‹ค(2021.07.31)

- ์ธ์ƒ์— ์—ฌํ•œ์ด ์—†๋‹ค๋Š”๊ฒŒ ์ข‹์€๋ง์ผ๊นŒ. ์•ž์œผ๋กœ 50๋…„์€ ๋” ์‚ด์•„์•ผํ•˜๊ณ  ํ˜น์—ฌ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋”์ด์ƒ ํ’€์–ด์•ผํ• ๊ฒƒ์ด ์—†๋Š” ์—ฌ์ƒ์ด, ์ƒ๊ฐ๋ณด๋‹ค ์ง€๋ฃจํ•˜์ง„ ์•Š์„์ง€.. ๊ฒŒ์ž„์† ๋ชจ๋“  ์•„์ดํ…œ์„ ๋‹ค๊ฐ€์ง€๊ณ  ์Šคํ† ๋ฆฌ๋ชจ๋“œ๋ฅผ ์ „๋ถ€ ํด๋ฆฌ์–ดํ•œ ๊ณ ์ธ๋ฌผ์˜ 300๋ฒˆ์งธ ํ•˜๋ฃจ์ฒ˜๋Ÿผ. 

 

 

๐ŸŒฑ ์˜ค๋Š˜์˜ ์ด์Šˆ 

- ํ”„๋กœ์ ํŠธ ๊ด€๋ จ ๋ฐฉํ–ฅ์„ฑ ํ† ์˜ ๋ฐ ๋ฐฐํฌ์šฉ ์ž‘์„ฑ ํ•„์ˆ˜.

 

 

๐ŸŒฑ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ (projects in progress)

- minishell (with sungclee)๐Ÿ“‹

- inception ๐Ÿ“‹

 

 

๐ŸŒฑ ํ”„๋กœ์ ํŠธ (minishell)

- ์šฐ๋ฆฌ๋Š”...์ด ์•„๋‹ˆ๊ณ  ๋‚˜๋Š” printf ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ํŒ๋ณ„ํ•˜๋Š”๋ฒ•์— ๋Œ€ํ•ด์„œ ์‚ฝ์งˆํ•œ ๊ฒฝํ—˜์ด ์žˆ๋‹ค.

- ๊ทธ ๊ฒฝํ—˜์ด ์˜ค๋Š˜ ๋‚˜์˜๊ณ ๋ฏผ์— ๋Œ€ํ•œ ๋‹ต์ด ๋˜์–ด์ฃผ๊ธฐ๋ฅผ ๋ฐ”๋ž„ ๋ฟ์ด๋‹ค.

 

๐Ÿ“‹ ์ž‘๋™์ƒํƒœ

- bashํ™˜๊ฒฝ์˜ ๋™์ž‘๊ฒฐ๊ณผ๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆํ™•์ธํ•˜๋Š”๊ฑด ๋‚˜์—๊ฒŒ ํฐ๋„์›€์ด ๋˜๊ณ ์žˆ๋‹ค. ๋‚ด๊ฐ€ ์•Œ๊ณ ์žˆ๋˜ ์‚ฌ์‹ค์„ bashํ™˜๊ฒฝ์—์„œ ๋‹ค์‹œ๊ธˆ ํ™•์ธํ•˜๋Š”๊ฒƒ๋งŒ์œผ๋กœ๋„ ๊ตฌํ˜„๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ์ด ๋œ๋‹ค.

# ํ…Œ์ŠคํŠธ01์ด๋ผ๋Š” ํŒŒ์ผ์— "111111111111111" ๋ฌธ์ž์—ด์„ ๋„ฃ์Œ
bash-3.2$ cat test01.txt 
111111111111111

# ํ…Œ์ŠคํŠธ02๋ผ๋Š” ํŒŒ์ผ์— "222222222222222" ๋ฌธ์ž์—ด ๋„ฃ์Œ
bash-3.2$ cat test02.txt 
222222222222222

# ์‹คํ—˜ 1 ์ถœ๋ ฅ์„ test02์— ์ด์–ด์“ฐ๊ธฐ(>>)ํ• ๊ฑด๋ฐ ์ž…๋ ฅ์„ test01๋กœํ•จ
bash-3.2$ cat >> test02.txt < test01.txt 

# ์‹คํ—˜๊ฒฐ๊ณผ 01
bash-3.2$ cat test01.txt 
111111111111111
bash-3.2$ cat test02.txt 
222222222222222
111111111111111

# ์‹คํ—˜ 02 test02์— ์ถœ๋ ฅ๊ฒฐ๊ณผ๋ฅผ ์ด์–ด์“ฐ๊ธฐ๋กœ ํ•˜๋Š”๋ฐ, ์‚ฌ์‹ค๊ทธ๊ฑด test01์— ๋ฎ์–ด์“ฐ๊ธฐํ• ๊ฑฐ์ž„
bash-3.2$ cat >> test02.txt > test01.txt 
aaaaaaaaaaaaaaa  # cat์˜ ํ‘œ์ค€์ž…๋ ฅ 11111
bbbbbbbbbbbbbbb  # cat์˜ ํ‘œ์ค€์ž…๋ ฅ 22222

# ์‹คํ—˜๊ฒฐ๊ณผ 02
bash-3.2$ cat test02.txt 
222222222222222
111111111111111
bash-3.2$ cat test01.txt 
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbb

# ์‹คํ—˜ 03 test02 ์ด์–ด์“ฐ๊ธฐ์ถœ๋ ฅ์ธ๋ฐ ์‚ฌ์‹ค test01 ์ด์–ด์“ฐ๊ธฐ์ถœ๋ ฅ์ด๋‹ค
bash-3.2$ cat >> test02.txt >> test01.txt
ใ…Šใ…Šใ…Šใ…Šใ…Šใ…Šใ…Šใ…Šใ…Š   # cat์˜ ํ‘œ์ค€์ž…๋ ฅ

# ์‹คํ—˜๊ฒฐ๊ณผ 03
bash-3.2$ cat test02.txt 
222222222222222
111111111111111
bash-3.2$ cat test01.txt 
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbb
ใ…Šใ…Šใ…Šใ…Šใ…Š

# ์‹คํ—˜04 ์ •์˜ ์ถœ๋ ฅ์„ test02๋กœํ• ๊ป€๋ฐ ์ž…๋ ฅ์„ ํžˆ์–ด๋…์œผ๋กœ "END"๊นŒ์ง€๋ฐ›๊ณ  ์‚ฌ์‹ค ์ถœ๋ ฅ์€ test01์— ๋ฎ์–ด์“ฐ๋Š”๊ฑฐ์˜€๋‹ค.
bash-3.2$ cat >> test02.txt << END >> test01.txt
> what     # ํžˆ์–ด๋…์œผ๋กœ ์ž…๋ ฅ๋ฐ›์Œ 11111
> is       # ํžˆ์–ด๋…์œผ๋กœ ์ž…๋ ฅ๋ฐ›์Œ 2222222
>          # ํžˆ์–ด๋…์œผ๋กœ ์ž…๋ ฅ๋ฐ›์Œ 33333333
> this     # ํžˆ์–ด๋…์œผ๋กœ ์ž…๋ ฅ๋ฐ›์Œ 444444444
> END      # ํžˆ์–ด๋… ์ข…๋ฃŒ๋ฌธ์ž "END"

# ์‹คํ—˜๊ฒฐ๊ณผ 04
bash-3.2$ cat test02.txt 
222222222222222
111111111111111
bash-3.2$ cat test01.txt 
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbb
ใ…Šใ…Šใ…Šใ…Šใ…Š
what
is

this
bash-3.2$

# ์‹คํ—˜05 ๋จผ์ € ๋ฆฌ๋””๋ ‰์…˜์ž…๋ ฅ(<)์„ text01๋กœ ์ฃผ๊ณ , ๋’ค์— ๋ช…๋ น์–ด์˜ ์ธ์ž๋กœ test02 ๋„˜๊ฒจ์ค€๋‹ค.
bash-3.2$ cat < test01.txt test02.txt 
bash-3.2$ cat test02.txt 
bash-3.2$ cat test01.txt 
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbb
ใ…Šใ…Šใ…Šใ…Šใ…Š
what
is

this
what
is

this
bash-3.2$ # test02.txt๋ฅผ ์šฐ์„ ์‹œํ•œ๋‹ค.

# ํŒŒ์ผ์ด๋ฆ„์ด ์—†๋Š” ์ธ์ž๋ฅผ ๋„˜๊ฒจ์ค„๊ฒฝ์šฐ์—๋Š” ์—๋Ÿฌ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šฐ๋Š”๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.
bash-3.2$ cat < test01.txt inval
cat: inval: No such file or directory
bash-3.2$ ls
cub3D           test            test02.txt
minishell       test01.txt
bash-3.2$

bash-3.2$ cat < inval test01.txt # test01.txt๋ฅผ ์ถœ๋ ฅํ•˜๋Š”๊ฒŒ ๋งž์œผ๋‚˜.
bash: inval: No such file or directory # inval์ด๋ผ๋Š” ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€์•Š์•„์„œ ์ค‘๋‹จ๋˜์—ˆ๋‹ค.

 

๐Ÿ“‹ ์‹คํ—˜์ฝ”๋“œ ์ž‘์„ฑ

- ์šฐ์„  bashํ™˜๊ฒฝ์„ ๊ตฌํ˜„ํ•จ์— ์žˆ์–ด์„œ ๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์ปค๋งจ๋“œ๋ผ์ธ์„ ์–ด๋–ป๊ฒŒ ์ €์žฅํ•˜๋Š”์ง€, ๋˜ ์ €์žฅ๋œ ์ปค๋งจ๋“œ๋ผ์ธ์„ ๋ถ„์„ํ•˜๋ฉด์„œ ์–ด๋–ค๋‚ด์šฉ์„ ๊ธฐ๋กํ•ด์•ผํ• ์ง€๋ฅผ ๊ฐ„๋‹จํžˆ ์‹คํ—˜ํ•˜๊ณ  ํ™•์ธํ•ด๋ณด์•˜๋‹ค.

/* ์•„์ด๋””์–ด๋Š” ํ”Œ๋ž˜๊ทธ ๊ตฌ์กฐ์ฒด + ์šฐ์„ ์ˆœ์œ„ํŒ๋ณ„ */
typedef struct s_flag
{
	/* ์ „๋ถ€๋‹ค ์Œ์ˆ˜๋กœ ์ดˆ๊ธฐํ™” ํ•ด๋†“๊ณ  ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ธ๋ฑ์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ์ฐ์–ด์„œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ํŒ๋ณ„ํ•˜๊ฒŒ ํ• ๊ฑฐ์•ผ*/
    	/* ํ•œ๋งˆ๋””๋กœ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์Œ์ˆ˜๋ฉด ๊ทธ ๊ธฐํ˜ธ๋Š” ์•„์˜ˆ ์—†๋Š”๊ฑฐ์•ผ! */
	int heredoc;/* ์—ฌ๋Ÿฌ ์ž…๋ ฅ๋“ค๊ณผ ๋น„๊ตํ•ด์„œ ์•„๋งˆ๋„ ๋’ค์—๊ฐ€ ์šฐ์„ ๊ถŒ์ด์žˆ๊ฒ ์ง€ */
	int rd_iput;/* ์ •ํ™•ํžˆ '<' ์— ๋Œ€ํ•œ ํ”Œ๋ž˜๊ทธ*/
	int rd_oput;/* ์ •ํ™•ํ•˜๊ฒŒ ์ด์–ด์“ฐ๊ธฐ '>>' ๋ž‘ ๋ฎ์–ด์“ฐ๊ธฐ '>' ๋Œ€ํ•ด์„œ์•ผ, ํ•˜์œ„ํ•จ์ˆ˜์•ˆ์—์„œ ๋ญ์ธ์ง€๋Š” ์•Œ์•„์„œ ํŒ๋ณ„ํ• ๊ฑฐ์•ผ*/
	int index; /* ํ•จ์ˆ˜ ๊ธธ์–ด์งˆํ…๋ฐ ๊ทธ๋ƒฅ ์ฒจ๋ถ€ํ„ฐ ์—ฌ๊ธฐ์„œ ์ธ๋ฑ์Šค ๋ณ€์ˆ˜ ๋„ฃ์–ด์“ฐ์ž. */
}	t_flag;

void cmd_redir_heredoc(t_command *cmd, t_list *env)
{
	t_flag flag;
	int i;

	i = -1;
	/* ์ธ๋ฑ์Šค๋ฅผ ์ด์ค˜์„œ ๊ทธ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์•ž๋’ค๋ฅผ ํ™•์ธ์ผ€ํ•˜๋Š” ๋กœ์ง. ๊นŒ์ง„ ์‚ด๋ฆด์ˆ˜์žˆ์–ด.*/
	/* ๊ฐ€์žฅ ์šฐ์„ ๊ถŒ์ด ์ฃผ์–ด์ง€๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ๊ทธ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์•ž๋’ค๋ฅผ ํ™•์ธํ•˜๊ฒŒ ํ•˜๋ฉด ๋ ๊ฒƒ๊ฐ™๋‹ค. */
	flag.index = -1;
	while(cmd->cmd_line[++flag.index])
	{/* ํŒŒ์‹ฑ๋œ ๋ผ์ธ๋ฐฐ์—ด์„ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๊ฐ€์žฅ๋’ค์—์žˆ๋Š” ๊ฑธ๋กœ ํ”Œ๋ž˜๊ทธ์œ„์น˜๋ฅผ ๊ฐฑ์‹ ํ•ด์ฃผ๋ ค๊ณ  ํ•œ๋‹ค. */
		/* ์šฐ์„  ์ •ํ™•ํžˆ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ๋Šฅ๋ ฅ์ด ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  execve๋ž‘์˜ ํ˜ธํ™˜์„ฑ๋„ ์ƒ๊ฐํ•ด์•ผํ•œ๋‹ค. ์ „์ฒด๋ฅผ ๋„˜๊ฒจ์ค„์ˆ˜์—†๋‹ค.*/
		if(ft_str_search(cmd->cmd_line[flag.index], "<<"))
			flag.heredoc = flag.index;/* ๋ฐœ๊ฒฌ๋œ ์ง€์ ์„ ์ €์žฅํ•˜๋ ค๋Š”๊ฒƒ. */
		else if(ft_str_search(cmd->cmd_line[flag.index], ">>"))
			flag.rd_oput = flag.index;/* ๋ฐœ๊ฒฌ๋œ ์ง€์ ์„ ์ €์žฅํ•˜๋ ค๋Š”๊ฒƒ. */
		else if(ft_str_search(cmd->cmd_line[flag.index], ">"))
			flag.rd_oput = flag.index;/* ๋ฐœ๊ฒฌ๋œ ์ง€์ ์„ ์ €์žฅํ•˜๋ ค๋Š”๊ฒƒ. */
		else if(ft_str_search(cmd->cmd_line[flag.index], "<"))
			flag.rd_iput = flag.index;/* ๋ฐœ๊ฒฌ๋œ ์ง€์ ์„ ์ €์žฅํ•˜๋ ค๋Š”๊ฒƒ. */
	}
	/* ํ”Œ๋ž˜๊ทธ ํŒŒ์‹ฑ ๊ฒฐ๊ณผ๋„ ํ™•์ธํ•ด๋ณด๊ณ  */
	printf("flag.heredoc : [%d]\n", flag.heredoc);/* ์ œ์ผ๋ ํžˆ์–ด๋…์ด ๋ช‡๋ฒˆ์งธ์— ์žˆ๋А๋ƒ */
	printf("flag.rd_oput : [%d]\n", flag.rd_oput);/* ์ œ์ผ๋ ์ถœ๋ ฅ๋ฆฌ๋””๋ ‰์…˜์ด ๋ช‡๋ฒˆ์งธ์— ์žˆ๋А๋ƒ */
	printf("flag.rd_iput : [%d]\n", flag.rd_iput);/* ์ œ์ผ๋ ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์ด ๋ช‡๋ฒˆ์งธ์— ์žˆ๋А๋ƒ */
	printf("flag.index(end) : [%d]\n\n", flag.index);/* ๋ฌธ์ž์—ด์˜ ๋์€ ์–ด๋””๋ƒ.*/

	/*ํŒŒ์‹ฑ๋‚ด์šฉ๋„ ํ™•์ธํ•ด๋ด*/
	while(cmd->cmd_line[++i])
		printf("cmd_cmd_line[%d] : [%s]\n", i, cmd->cmd_line[i]);
    exit(0);/* ์‹คํ—˜์ค‘์ด๋‹ˆ๊นŒ ์ž„์‹œ์ข…๋ฃŒ, ๋ฌธ์ œ์ƒ๊ธฐ๋ฉด ์•ˆ๋ผ */
}

 

๐Ÿ“‹ ๊ฒฐ๊ณผํ™•์ธ & ๋ถ„์„

- ์ถœ๋ ฅ๊ฒฐ๊ณผ๊ฐ€ 99%, ๊ทธ ์ด์ƒ์œผ๋กœ ํ™•์‹ ์— ๊ฐ€๊น๋‹ค ํ•˜๋”๋ผ๋„ ๊ฒฐ๊ณผ๋ฅผ ๊ตณ์ด ์‹œ๊ฐํ™”ํ•ด์„œ ํ™•์ธํ•˜๋Š”ํŽธ์ด๋‹ค. ๋งž๋Š”์ง€ ํ‹€๋ฆฐ์ง€ ์ง์ ‘ ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ํ™•์ธํ•œ ๊ฒƒ๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ์–ธ์ œ ์–ด๋””์„œ๋‚˜ ํ™•์‹ ์— ๊ฐ€๋“์ฐฌ ๋Œ€๋‹ต์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค. 

junselee /minishell ./minishell 

    ###    ####             ##   ##    ##     ##  ##    #####   ##   ##  #######  ####     ####    
   ####   ##  ##            ### ###   ####    ##  ##   ##   ##  ##   ##   ##   #   ##       ##     
  ## ##       ##            #######  ##  ##    ####    #        ##   ##   ## #     ##       ##     
 ##  ##     ###             #######  ##  ##     ##      #####   #######   ####     ##       ##     
 #######   ##               ## # ##  ######    ####         ##  ##   ##   ## #     ##   #   ##   # 
     ##   ##  ##            ##   ##  ##  ##   ##  ##   ##   ##  ##   ##   ##   #   ##  ##   ##  ## 
     ##   ######            ##   ##  ##  ##   ##  ##    #####   ##   ##  #######  #######  ####### 

minishell-1.0 %% cat > test02.txt << END >> test01.txt # ์š” ๊ฒฝ์šฐ๋ฅผ ํŒŒ์‹ฑํ•˜๋ฉด์„œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ฐ์–ด๋ณด์ž.
flag.heredoc : [3] # ์ œ์ผ๋ ํžˆ์–ด๋…์ด ๋ช‡๋ฒˆ์งธ์— ์žˆ๋А๋ƒ
flag.rd_oput : [5] # ์ œ์ผ๋ ์ถœ๋ ฅ๋ฆฌ๋””๋ ‰์…˜์ด ๋ช‡๋ฒˆ์งธ์— ์žˆ๋А๋ƒ
flag.rd_iput : [1] # ์ œ์ผ๋ ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์ด ๋ช‡๋ฒˆ์งธ์— ์žˆ๋А๋ƒ
flag.index(end) : [7] # ๋ฌธ์ž์—ด์˜ ๋์€ ์–ด๋””๋ƒ, ์ฆ‰ 'NULL'์ด ์–ด๋””๋ƒ.

cmd_cmd_line[0] : [cat] # cmd1
cmd_cmd_line[1] : [>] # ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์ด์ง€๋งŒ ํ”Œ๋ž˜๊ทธ๋ž‘ ์ธ๋ฑ์Šค๊ฐ€ ๊ฐ™์งˆ์•Š์œผ๋‹ˆ, ๋’ค์— ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์ด ๋˜์žˆ๋‹ค.
cmd_cmd_line[2] : [test02.txt] # ๋ฆฌ๋””๋ ‰์…˜๋’ค์— ์˜ค๋Š” ํŒŒ์ผ๋ช…(๋งˆ์ง€๋ง‰์ด ์•„๋‹ˆ์–ด๋„ ์˜คํ”ˆ์€ ๋˜์–ด์•ผํ•จ.)
cmd_cmd_line[3] : [<<] # ์ œ์ผ๋ ํžˆ์–ด๋…์€ ๋ผ์ธ[3]์— ์žˆ๋‹ค -> ํ”Œ๋ž˜๊ทธ ์ฐธ์ด๋‹ค.
cmd_cmd_line[4] : [END] # ํžˆ์–ด๋… ๋’ค์—๋Š” ์ข…๋ฃŒ๋ฌธ์ž๊ฐ€ ์˜จ๋‹ค.
cmd_cmd_line[5] : [>>] # ์ œ์ผ๋ ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์€ ๋ผ์ธ[5]์— ์žˆ๋‹ค -> ํ”Œ๋ž˜๊ทธ๋Š” ์ฐธ์ด๋‹ค.
cmd_cmd_line[6] : [test01.txt] # ๋ฆฌ๋””๋ ‰์…˜๋’ค์— ์˜ค๋Š” ํŒŒ์ผ๋ช…(๋งˆ์ง€๋ง‰์ด ์•„๋‹ˆ์–ด๋„ ์˜คํ”ˆ์€ ๋˜์–ด์•ผํ•จ.)
                               # ๊ทผ๋ฐ์ด์ œ ๋ผ์ธ๋ฒˆํ˜ธ๊ฐ€ flag.index - 1์ด๋‹ˆ๊นŒ ๋งˆ์ง€๋ง‰์ด ๋งž๋‹ค.
junselee /minishell

minishell-1.0 %% cat < test01.txt test01.txt # ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์„์ฃผ๊ณ  ๋’ค์— ์ธ์ž๋ฅผ ์ค€๋‹ค.
flag.heredoc : [-1] # ํžˆ์–ด๋…์€ ์—†๋‹ค. ์Œ์ˆ˜.
flag.rd_oput : [-1] # ์ถœ๋ ฅ๋ฆฌ๋””๋ ‰์…˜๋„ ์—†๋‹ค. ์Œ์ˆ˜.
flag.rd_iput : [1] # ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์€ ๋ผ์ธ[1]์ด ๋งˆ์ง€๋ง‰์ด๋‹ค.
flag.index(end) : [4] # ๋ฌธ์ž์—ด์˜ ๋(NULL)์€ ๋ผ์ธ[4]๋‹ค.

cmd_cmd_line[0] : [cat]
cmd_cmd_line[1] : [<] # ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์ด ์˜ค๊ณ .
cmd_cmd_line[2] : [test01.txt] # ๋ฐ›์•„์™€์•ผํ•  ํŒŒ์ผ์ด๋ฆ„์ด์˜จ๋‹ค.
cmd_cmd_line[3] : [test01.txt] # ๊ทผ๋ฐ ๋์€ ์ด์นœ๊ตฌ๋‹ค.
                                # ๋˜ ์ƒ๊ฐํ•ด๋ณผ์ ์€ ์šฐ์„ ์ˆœ์œ„๋Š” ๋’ค์—์žˆ์ง€๋งŒ ์•ž์—๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ.
                                # ๋’ค๊ฐ€ ํŒŒ์ผ์ด๋ฆ„์ด ์•„๋‹ˆ๊ณ  ์˜ต์…˜์ด๋ฉด ์•ž์„ ์˜ต์…˜์— ๋งž๊ฒŒ ์‹คํ–‰ํ•œ๋‹ค.

junselee /minishell

 

๐Ÿ“‹ ๊ธฐ๋Šฅ๊ตฌํ˜„ ์‹คํ—˜ 01

- ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ bashํ™˜๊ฒฝ์˜ ์ž‘๋™๋ฐฉ์‹์„ ๋‚˜์˜ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ๋ชจ๋ฐฉํ•ด๋ณด์ž. ์ž…๋ ฅ์— ๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„๋ถ€ํ„ฐ.

# bash๊ฒฝ์šฐ ๋ฆฌ๋””๋ ‰์…˜ ์ž…๋ ฅ์„ ๋จผ์ €๋ฐ›๊ณ , ๊ทธ๋‹ค์Œ ํžˆ์–ด๋…์œผ๋กœ ์ข…๋ฃŒ๋ฌธ์ž๋ฅผ ๋ฐ›์œผ๋ฉด cat์€ ํžˆ์–ด๋…์„ ์ธ์ž๋กœ ๋ฐ›์•„์˜จ๋‹ค.
bash-3.2$ cat < tesxt << END # ๊ทผ๋ฐ ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์— ์—†๋Š”ํŒŒ์ผ์„ ์ค˜๋ณด์ž.
> aaaaaaaa # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
> bbbbbbbb # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
> cccccccc # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
> dddddddd # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
> END      # ์ข…๋ฃŒ๋ฌธ์ž๋‹ˆ๊นŒ ๊ทธ๋งŒ๋ฐ›๋Š”๋‹ค.
bash: tesxt: No such file or directory # ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ์ฒซ๋ฒˆ์งธ ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์ด ์˜ฌ๋ฐ”๋ฅด์ง€์•Š์•˜๊ธฐ๋•Œ๋ฌธ์— ๋ฌด์‹œ.
bash-3.2$

# minishell๋กœ ํ‰๋‚ด๋‚ด๊ธฐ
junselee /minishell ./minishell 

    ###    ####             ##   ##    ##     ##  ##    #####   ##   ##  #######  ####     ####    
   ####   ##  ##            ### ###   ####    ##  ##   ##   ##  ##   ##   ##   #   ##       ##     
  ## ##       ##            #######  ##  ##    ####    #        ##   ##   ## #     ##       ##     
 ##  ##     ###             #######  ##  ##     ##      #####   #######   ####     ##       ##     
 #######   ##               ## # ##  ######    ####         ##  ##   ##   ## #     ##   #   ##   # 
     ##   ##  ##            ##   ##  ##  ##   ##  ##   ##   ##  ##   ##   ##   #   ##  ##   ##  ## 
     ##   ######            ##   ##  ##  ##   ##  ##    #####   ##   ##  #######  #######  ####### 

minishell-1.0 %% cat < tesxt << END # ๊ฐ™์€์ธ์ž๋ฅผ ์ฃผ๊ณ 
aaaaaaaaaa # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
bbbbbbbbbb # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
cccccccccc # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
dddddddddd # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
END        # ์ข…๋ฃŒ๋ฌธ์ž๋‹ˆ๊นŒ ๊ทธ๋งŒ๋ฐ›๋Š”๋‹ค.
minishell: tesxt: No such file or directory #์ฒซ๋ฒˆ์งธ ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์ด ์˜ฌ๋ฐ”๋ฅด์ง€์•Š์•˜๊ธฐ๋•Œ๋ฌธ์— ๋ฌด์‹œ.

# ๋ณด๋‹ˆ๊นŒ ํžˆ์–ด๋„ํ๋จผํŠธ ์ž…๋ ฅ์€ "> "๋ฅผ ์ฃผ๊ณ ๋‚˜์„œ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค ์ˆ˜์ •ํ•˜์ž.
minishell-1.0 %% cat < tesxt << END
> aaaa  # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
> cccc  # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
> dddd  # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
> sssss # ํžˆ์–ด๋…์„ ์ž…๋ ฅ๋ฐ›๊ณ 
> END   # ์ข…๋ฃŒ๋ฌธ์ž๋‹ˆ๊นŒ ๊ทธ๋งŒ๋ฐ›๋Š”๋‹ค.
minishell: tesxt: No such file or directory #์ฒซ๋ฒˆ์งธ ์ž…๋ ฅ๋ฆฌ๋””๋ ‰์…˜์ด ์˜ฌ๋ฐ”๋ฅด์ง€์•Š์•˜๊ธฐ๋•Œ๋ฌธ์— ๋ฌด์‹œ.

 

๐Ÿ“‹ ๊ธฐ๋Šฅ๊ตฌํ˜„ ์‹คํ—˜ 02

- ์ถœ๋ ฅ์— ๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„ ์—ญ์‹œ ๋ชจ๋ฐฉํ•ด๋ณด์•˜๋‹ค.

# bash ์ฒ˜๋ฆฌ๊ณผ์ •.
bash-3.2$ cat aaaa.txt # aaaa.txt์—๋Š” ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ๋“ค์–ด์žˆ๊ณ ,
aaaaaa
aaaaaa
bash-3.2$ cat bbbb.txt # bbbb.txt์—๋Š” ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ๋“ค์–ด์žˆ๋‹ค.
bbb
bbbb

# cat์œผ๋กœ ์ž…๋ ฅ์„ ๋ฎ์–ด์“ฐ๊ธฐ๋กœ aaaa.txt์—๊ฒŒ ์ด์–ด์“ฐ๊ธฐ๋กœ bbbb.txt์—๊ฒŒ ๋„˜๊ฒจ์ค˜๋ณด์ž
bash-3.2$ cat > aaaa.txt >> bbbb.txt
ccccccccc # cat์˜ ํ‘œ์ค€์ž…๋ ฅ 1111
ddddddddd # cat์˜ ํ‘œ์ค€์ž…๋ ฅ 2222
eeeeeeeee # cat์˜ ํ‘œ์ค€์ž…๋ ฅ 3333
fffffffff # cat์˜ ํ‘œ์ค€์ž…๋ ฅ 4444

# aaaa.txt๋Š” ๋ฎ์–ด์“ฐ๊ธฐ๋กœ ์˜คํ”ˆ๋˜์—ˆ๊ณ , ํ‘œ์ค€์ž…๋ ฅ์€ bbbb.txt๋กœ ๋„˜์–ด๊ฐ”๊ธฐ๋•Œ๋ฌธ์— ์•„๋ฌด๋‚ด์šฉ์ด์—†๋‹ค.
bash-3.2$ cat aaaa.txt
# bbbb.txt๊ฐ€ ์ด์–ด์“ฐ๊ธฐ๋กœ ์˜คํ”ˆ๋˜์—ˆ๊ณ , ์›๋ž˜๋“ค์–ด์žˆ๋˜ ๋‚ด์šฉ๋’ค์— cat์˜ ํ‘œ์ค€์ž…๋ ฅ์„ ๋„˜๊ฒจ๋ฐ›์•˜๋‹ค.
bash-3.2$ cat bbbb.txt
bbb
bbbb
ccccccccc
ddddddddd
eeeeeeeee
fffffffff
bash-3.2$

# minishell๋กœ ํ‰๋‚ด๋‚ด๊ธฐ
junselee /minishell ./minishell 

    ###    ####             ##   ##    ##     ##  ##    #####   ##   ##  #######  ####     ####    
   ####   ##  ##            ### ###   ####    ##  ##   ##   ##  ##   ##   ##   #   ##       ##     
  ## ##       ##            #######  ##  ##    ####    #        ##   ##   ## #     ##       ##     
 ##  ##     ###             #######  ##  ##     ##      #####   #######   ####     ##       ##     
 #######   ##               ## # ##  ######    ####         ##  ##   ##   ## #     ##   #   ##   # 
     ##   ##  ##            ##   ##  ##  ##   ##  ##   ##   ##  ##   ##   ##   #   ##  ##   ##  ## 
     ##   ######            ##   ##  ##  ##   ##  ##    #####   ##   ##  #######  #######  ####### 

minishell-1.0 %% cat aaaa.txt # aaaa.txt์—๋Š” ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ๋“ค์–ด์žˆ๊ณ ,
aaaaaa
aaaaaa
minishell-1.0 %% cat bbbb.txt # bbbb.txt์—๋Š” ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ๋“ค์–ด์žˆ๋‹ค.
bbbbb
bbb

# cat์œผ๋กœ ์ž…๋ ฅ์„ ๋ฎ์–ด์“ฐ๊ธฐ๋กœ aaaa.txt์—๊ฒŒ ์ด์–ด์“ฐ๊ธฐ๋กœ bbbb.txt์—๊ฒŒ ๋„˜๊ฒจ์ค˜๋ณด์ž
minishell-1.0 %% cat > aaaa.txt >> bbbb.txt 
ccccccccccc # cat์˜ ํ‘œ์ค€์ž…๋ ฅ 1111
ddddddddddd # cat์˜ ํ‘œ์ค€์ž…๋ ฅ 2222
eeeeeeeeeee # cat์˜ ํ‘œ์ค€์ž…๋ ฅ 3333
fffffffffff # cat์˜ ํ‘œ์ค€์ž…๋ ฅ 4444

# aaaa.txt๋Š” ๋ฎ์–ด์“ฐ๊ธฐ๋กœ ์˜คํ”ˆ๋˜์—ˆ๊ณ , ํ‘œ์ค€์ž…๋ ฅ์€ bbbb.txt๋กœ ๋„˜์–ด๊ฐ”๊ธฐ๋•Œ๋ฌธ์— ์•„๋ฌด๋‚ด์šฉ์ด์—†๋‹ค.
minishell-1.0 %% cat aaaa.txt
# bbbb.txt๊ฐ€ ์ด์–ด์“ฐ๊ธฐ๋กœ ์˜คํ”ˆ๋˜์—ˆ๊ณ , ์›๋ž˜๋“ค์–ด์žˆ๋˜ ๋‚ด์šฉ๋’ค์— cat์˜ ํ‘œ์ค€์ž…๋ ฅ์„ ๋„˜๊ฒจ๋ฐ›์•˜๋‹ค.
minishell-1.0 %% cat bbbb.txt 
bbbbb
bbb
ccccccccccc
ddddddddddd
eeeeeeeeeee
fffffffffff
minishell-1.0 %%

'์ผ์ƒ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

#005. ์˜ค๋Š˜  (0) 2021.08.01
#004. ์ž„์‹œ์ €์žฅ  (0) 2021.07.31
#002. ์•„๋ฉ”๋ฆฌ์นด๋…ธ  (0) 2021.07.30
#001. ์‹œ์ž‘์ด๋ฐ˜์ด๋‹ค  (0) 2021.07.29
#000. ๋ธ”๋กœ๊ทธ์‹œ์ž‘  (0) 2021.07.28