ํ์ดํ
์ฐ์ ๋ถ๋ชจ์์ ํ๋ก์ธ์ค๋ 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๋ก ์์ฐ๊ฒฐ์ํค๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๊ฒ ์ข์๊ฑฐ๊ฐ๋ค.
๊ณผ์ ๋ฅผ ์งํํ๋ฉด์ cmd
๋ผ๋ฆฌ๋ง ๋ฆฌ์คํธ๋ก ์ฐ๊ฒฐ๋๊ณ , ํด๋น ๋ฆฌ์คํธ์ ๋ช
๋ น์ด/๋ฆฌ๋ค์ด๋ ์
์ด ์๋ก ๋ค๋ฅธ char **
๋ณ์์ ์ ์ฅ๋๋ ํ์์ผ๋ก ๋ณ๊ฒฝ๋จ.
2. ์ธ๋ถ fork ๋ฐ dup ๋์ ๋ฐฉ์
๊ฐ๊ฐ |
๋ก ์ฐ๊ฒฐ๋ ๋ช
๋ น์ดset์ fork๋ ๋ณ๋์ ํ๋ก์ธ์ค์ด๋ค.
2.1 ํ์ดํ ์ ์ฒด ๋์๋ฐฉ์
- ์์๋น ํ๋์ ํ๋ก์ธ์ค๋ง์ forkํ๋ ๋ฐฉ์์ด๋ฉฐ, fork๋ ์์๋ ํ๋๋ง์ ํ๋ก์ธ์ค๋ง์ forkํ๋ค.
- ์ด์ : pipe๋ ๋ถ๋ชจ์์๊ฐ์ IPCํต์ ์ด๋ฏ๋ก.
- ์ด๋ ๋ช ๋ น์ด๋น ํ๋์ ํ๋ก์ธ์ค์ ํ ๋น๋๋ฉฐ, ๊ฐ์ฅ ๋์ค์ fork๋ ๋ช ๋ น์ด๊ฐ ๊ฐ์ฅ ์ฒ์์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค. ๋ฐ๋ผ์ ์ํฅ์์ผ๋ก ๋ช ๋ น์ด๋ค์ด ์คํ๋๊ณ ์ข ๋ฃ์ํ๋ฅผ ๋ฐํํ๊ฒ ํ๋ค.
- ๋ชจ๋ ๋ช ๋ น์ ์์ํ๋ก์ธ์ค์์ ๋์ํ๋ค. ๋ถ๋ชจํ๋ก์ธ์ค, ์ฆ ์ ธ์ ์์ํ๋ก์ธ์ค๊ฐ ๋๋๊ธฐ๋ง์ ๊ธฐ๋ค๋ฆฐ๋ค.
2.2 ๊ฐ ํ์ดํ ๋ณ ์ธ๋ถ ๋์๋ฐฉ์
- ์ฐ์ ์์ ํ๋ก์ธ์ค๊ฐ ์ ํ๋๋ ๋ช ๋ น์ด๋ฅผ ์ํํ๋ฏ๋ก ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
- ํ์ ์์ด์ง ์ด์ ํ๋ก์ธ์ค๊ฐ ํ์ดํ์ write๋ถ๋ฅผ closeํ๋ค.</p>(์ด์ : ์ํ๋ฉด EOF๊ฐ ์์ด์ ๊ณ์ ์ฝ๊ฒ๋๋ค).
- ํ์ดํ๋ก ์ฐ๊ฒฐ๋ exec๋ ํ์ค ์ /์ถ๋ ฅ์ dup2ํ๋ค. -> ์ด์ ํ๋ก์ธ์ค์ ํ์ค ์ถ๋ ฅ
- bash์์๋ ๋ฆฌ๋ค์ด๋ ์
์ด
|
๋ณด๋ค ์ฐ์ ๊ถ์ ๊ฐ์ง๋ฏ๋ก ๋ฆฌ๋ค์ด๋ ์ ๋ ํ์ผ๋ก ํ์ค ์ /์ถ๋ ฅ์ ๊บพ์ด์ค๋ค. </p>(์ด๋ ๋ฆฌ๋ค์ด๋ ์ ํ๊ธฐ ์ํด ์ฐ ํ์ผ์ dup2ํ ๊ผญ closeํด์ค๋ค </p>-> fd๋์๋๋ฌธ. ๋ณต์ฌ๋๊ธฐ ๋๋ฌธ์ ์๋ณธ์ ์ง์์ค๋ ๋๋ค - ๋นํธ์ธ ํจ์์ ๊ฒฝ์ฐ forkํ๊ณ exec์์ด ํด๋น ํจ์๋ฅผ ์ํ ํ exitํ๋ค.
- ๊ฐ ํ๋ก์ธ์ค๋ณ ์์ ๋์ ๋ฐ๋ณต๋ฌธ์ ๋ชจ๋ ๊ฑธ ๋งก๊ธฐ๋ฉด์ fork ๋ฐ dupํ๊ฒ๋ฉด ์ฌ๋ฌ๊ฐ์
|
์ ๋ ฅ์ ๊ตฌํํ ์ ์๋ค.