TR-42 / minishell

https://tr-42.github.io/minishell/
0 stars 0 forks source link

heredoc #17

Closed TetsuOtter closed 1 year ago

TetsuOtter commented 1 year ago

heredoc機能を実装しました。 本当は文字列の読み込みについてreadlineを使ってやるべきではあるんですが、とりあえずgnlを使って実装しています。

処理の流れ

  1. (入力 -> Tokenize/Validation)
  2. CMDTYP_RED_HEREDOCなものをチェック
  3. $TMPDIR/minish_heredoc_*なファイルを新規作成 (_0から順に作成済みかチェックし、最大で10桁までトライする)
  4. gnlを用いて1行ずつ読み込み、そしてdelimiterでない場合はそのファイルに書き込む
  5. forkで子プロセスを立ち上げる
  6. (子プロセス) 先ほどのファイルを開き、そのfdをfd_to_thisにセットする
  7. (子プロセス) dup2等、パイプと同じフローを辿る
  8. (親プロセス) waitpidで子プロセスの終了を待つ
  9. (親プロセス) tmpファイルを削除

image

仕様 (注意事項)


今回の変更範囲は 49ee2ab92d7b62f86b90593ca9bfb0193b383362...10e674d072e63b35195fc5e28b6bb2f524ab82f3 だけです。 これ以前のものは #11 に含まれています。

レビュー時はこちらをご活用ください https://github.com/TR-42/minishell/pull/17/files/d905f6787c5f9606cbab226d9331ab5eef905046..10e674d072e63b35195fc5e28b6bb2f524ab82f3