Minishell pipe and redirections

ํŒŒ์ดํ”„

img ์šฐ์„  ๋ถ€๋ชจ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” fork๋ฅผ ํ†ตํ•ด pipe(fds)๋ฅผ ๊ฐ™์ดํ•˜๊ฒŒ ๋œ๋‹ค. pipe(fds)๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐํ™”๋œ fds๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„ ๊ณต์œ ํ•˜๋Š” ์ €์žฅ๊ณต๊ฐ„(ํŒŒ์ผ)์˜ read only, write onlye ๋””์Šคํฌ๋ฆฝํ„ฐ๋“ค์ด๋‹ค. ๋ถ€๋ชจ๋˜ ์ž์‹์ด๋˜ fds[0]์€ read, fds[1]์€ write์ด๋‹ค.

๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กฐ์ž‘ํ•ด์•ผํ•˜๋Š” ํŒŒ์ดํ”„๋Š” ์ด 2๊ฐœ์ด๋‹ค. ์ด์ „ ํ”„๋กœ์„ธ์Šค์™€ ์—ฐ๊ฒฐ๋œ ํŒŒ์ดํ”„, ์ดํ›„ ํ”„๋กœ์„ธ์Šค์™€ ์—ฐ๊ฒฐ๋œ ํŒŒ์ดํ”„์ด๋‹ค.

1. fork() ๋ฐ pipe() ๋ฐฉ์‹

์šฐ์„  ๋นŒํŠธ์ธํ•จ์ˆ˜๋Š” fork ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ built์ธ ํ•จ์ˆ˜๋Š” minishell ํ”„๋กœ์„ธ์Šค์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. ํ•˜์ง€๋งŒ, pipe๋Š” forkํ•œ ๋ถ€๋ชจ์ž์‹๊ฐ„

์šฐ์„  ํŒŒ์‹ฑํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ cmd ์‚ฌ์ด๋Š” fork ํ•˜์—ฌ ์—ฐ๊ฒฐํ•œ๋‹ค. ์ด๋•Œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์˜ ํŒŒ์ผ์€ forkํ•˜์ง€ ์•Š๋Š”๋‹ค. ยซ, < ๊ฐ™์€๊ฒฝ์šฐ ๋’ค์— ์žˆ์ง€๋งŒ ๋จผ์ € ์—ฐ๊ฒฐ ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—โ€ฆ ์•ž๋’ค ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์ธ์ง€ ํŒŒ์•…ํ•ด์„œ stdin/out์„ dup2๋กœ ์ž˜์—ฐ๊ฒฐ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ข‹์„๊ฑฐ๊ฐ™๋‹ค.

img2 ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ cmd๋ผ๋ฆฌ๋งŒ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐ๋˜๊ณ , ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ์— ๋ช…๋ น์–ด/๋ฆฌ๋‹ค์ด๋ ‰์…˜์ด ์„œ๋กœ ๋‹ค๋ฅธ char ** ๋ณ€์ˆ˜์— ์ €์žฅ๋˜๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝ๋จ.

2. ์„ธ๋ถ€ fork ๋ฐ dup ๋™์ž‘ ๋ฐฉ์‹

๊ฐ๊ฐ |๋กœ ์—ฐ๊ฒฐ๋œ ๋ช…๋ น์–ดset์€ fork๋œ ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค์ด๋‹ค.

2.1 ํŒŒ์ดํ”„ ์ „์ฒด ๋™์ž‘๋ฐฉ์‹

2.2 ๊ฐ ํŒŒ์ดํ”„ ๋ณ„ ์„ธ๋ถ€ ๋™์ž‘๋ฐฉ์‹