rnittaBadCommit / minishell_main

0 stars 1 forks source link

子プロセスに入ってから必要な関数 #12

Closed rnittaBadCommit closed 3 years ago

rnittaBadCommit commented 3 years ago

pwd >text | ls | cat -e > text

仮定======== パイプの処理とかフォークの処理をされている パイプごとに、それぞれのコマンドは文字列配列(STR_A)に分けられている。 ==========

{   {"pwd", ">text", NULL}   ←STR_A   {"ls", NULL}   {"cat", -e", ">", "text", NULL}  }

文字列配列STR_Aを基にしてリダイレクトを行う関数. OK 文字列配列STR_Aを基にしてリダイレクト以外の要素をもつ文字列配列の配列STR_Bを作る関数

{"pwd", NULL} ←STR_B

ビルトイン関数かどうかを判定する関数  OK 文字列配列STR_B(あるいは文字列"pwd")を渡されるとフルパスを返す関数. OK

rnittaBadCommit commented 3 years ago

ビルトイン関数かどうかを判定する関数OK

sasakiyudai commented 3 years ago

仮定を ">" "<" ">>" を見つけたら、前後にスペースを開けた文字列を生成する関数 → その後にスプリット とした char ls[] = {"ls", NULL}; char ls1[] = {"ls", NULL};

char *rev[] = {"rev", NULL};
char *nl[] = {"nl", NULL};

char *cat[] = {"cat", "architecture.c", ">", "hi", ">", "hii" ,NULL};
char *cat1[] = {"cat", "architecture.c", NULL};

char *wc[] = {"wc", "-c", NULL};
char *head[] = {"head", "-c", "1000", NULL};
char *time[] = {"time", "-p", "sleep", "3", NULL};
char *echo[] = {"echo", "toto", NULL};

// raw_cmd → リダイレクトもファイル名も残したままのやつ
// cmd → リダイレクトもファイル名も削ぎ落として整形したやつ
char **raw_cmd[] = {cat, NULL};
char **cmd[] = {cat1, NULL};

pipeline(cmd, raw_cmd);

文字列配列STR_Aを基にしてリダイレクトを行う関数OK

rnittaBadCommit commented 3 years ago

文字列配列STR_B(あるいは文字列"pwd")を渡されるとフルパスを返す関数 OK

sasakiyudai commented 3 years ago

str_aからstr_bを作る関数 done