0923 - tamagoyakii/minishell GitHub Wiki
Parsing Part
๋ฐํ ๊ฐ ๊ตฌ์กฐ์ฒด ์์ฑ
typedef enum e_return_type
{
SUCCESS,
FAIL
} t_return_type;
redir_type ๊ตฌ์กฐ์ฒด ๋ณ๊ฒฝ
typedef enum e_redir_type
{
NONE, // ์ถ๊ฐ
T_OUT, // ์ด๋ฆ ๋ณ๊ฒฝ
A_OUT, // ์ด๋ฆ ๋ณ๊ฒฝ
IN, // ์ด๋ฆ ๋ณ๊ฒฝ
HDOC // ์ด๋ฆ ๋ณ๊ฒฝ
} t_redir_type;
argv ๊ตฌ์กฐ์ฒด ๋ณ๊ฒฝ
typedef struct s_argv
{
char **cmd;
struct s_redir *in;
struct s_redir *out;
struct s_redir *hdoc; // ์ถ๊ฐ
struct s_argv *next;
} t_argv;
Execute Part
flowchart ์์ฑ ํ๊ธฐ
- ํ์ด๋ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ ๋จผ์ ์ถ๊ฐ๋จ
- ํ์ด๋ ์ ์์ ํ๋ก์ธ์ค๋ก ์ฒ๋ฆฌํจ
heredoc ์ฒ๋ฆฌํ๊ธฐ
/* d๊ฐ ์๋ ํ์ผ์ผ ๋ */
cat < d << dd
// โ ํ์ด๋
๋จผ์ ๋๋ด๊ณ , ํ์ด๋
์ด ๋๋๋ฉด "No such file ~ "์ด ๋ธ
cat < d << dd < c
// โ ํ์ด๋
๋จผ์ ์คํ ๋๊ณ ๋๋ ํ, "No such file ~ "์ด ๋ธ (c๋ ์คํ ์ ๋จ)
โ ํ์ด๋
์คํ์ํค๊ธฐ ์ํด์, ์ผ์ชฝ๋ถํฐ ์ฝ๋ค๊ฐ ์๋ ํ์ผ์ผ ๊ฒฝ์ฐ flag ๋ฅผ ์ธ์์ฃผ๊ณ ๋๊น์ง ๊ณ์ ์ฝ๊ธฐ
error ์ฒ๋ฆฌํ๊ธฐ
fork์คํจ์- while๋ฌธ ํ์ถ, ์คํ๋ ์์๋ค์ wait๋ก ๊ธฐ๋ค๋ฆฌ๊ธฐ โ
break ;๋ง ์์ผ์ฃผ๋ฉด ๋จ
- while๋ฌธ ํ์ถ, ์คํ๋ ์์๋ค์ wait๋ก ๊ธฐ๋ค๋ฆฌ๊ธฐ โ
pipe์คํจ์- ํ๋ก์ธ์ค ์ฒ๋ฆฌ๋ก ์ ๋ค์ด๊ฐ๊ณ ,
return ;์์ผ์ ๋ค์ ์ ๋ ฅ ๋ฐ๊ธฐ
- ํ๋ก์ธ์ค ์ฒ๋ฆฌ๋ก ์ ๋ค์ด๊ฐ๊ณ ,
execve์คํจ์exit(1);
malloc์คํจ์- ๋ฌด์กฐ๊ฑด
exit(1);
- ๋ฌด์กฐ๊ฑด
open์คํจ์ &dup์คํจ์- ์์ ํ๋ก์ธ์ค :
exit(1); - ๋ถ๋ชจ ํ๋ก์ธ์ค :
return ;์์ผ์ ๋ค์ ์ ๋ ฅ ๋ฐ๊ธฐ
- ์์ ํ๋ก์ธ์ค :
error ์ฒ๋ฆฌ๋ฅผ ์ํ ์ ์ญ๋ณ์ ๊ตฌ์กฐ์ฒด
// ๋จ์ค๋ ์ถ๊ฐํด์ฃผ์ธํจ
todo
๊ตฌํ ํํธ nheo
- ft_open ๊ตฌํ
- init ๊ตฌํ
- is_builtin ๊ตฌํ
์๊ทธ๋ ํํธ jabae
- ํ์ด๋ (์์) ์๊ทธ๋ ์ฒ๋ฆฌ ๊ตฌํ : ^C -> exit 1
- ์์ ์๊ทธ๋ ์ฒ๋ฆฌ ๊ตฌํ : exit + 128
- ๋ฉ์ธ ์๊ทธ๋ ์ฒ๋ฆฌ ๊ตฌํ : ^C -> last_exit 1 + ์ ํ๋กฌํฌํธ ์ถ๋ ฅ, ^\ -> ์๋ฌด๊ฒ๋ ์ํ๊ธฐ
์๋ฌ ํธ๋ค๋ง nheo
- fork ์คํจ์ ํธ๋ค๋งํด์ฃผ๋ ๋ถ๋ถ ๊ตฌํ
- init, heredoc ์คํจ์ freeํ๊ณ ์ข ๋ฃํด์ฃผ๋ ํจ์ ๊ตฌํ