Closed9
minishell
pipex
主要な関数についてわかりやすく書いている
パイプの不要な出入り口をクローズする必要があるのはなぜだろうか? 最も大きな理由は,パイプの入口に対応するファイルディスクリプタがすべてクローズされるまで,そのパイプの出口には EOF が送られないからである. EOF が送られない結果,そのパイプの出口からデータを読み出そうとしているプロセスは,読み出し用の関数(getcharなど)からいつまでたってもリターンしないことになる.その結果,プログラムが固まるなどの影響が出る.
man bash によると
パイプ間の入出力接続は指定されたリダイレクション先に実行される.
また、パイプラインの各コマンドは、個別のプロセスとして実行される。
リダイレクトについて
$> cat | cat | ls
ls の出力が行われ、入力待ちになる。その後エンターを2回押すと終了する。
pipeコマンド
int pipefd[2];
pipe(pipefd);
pipe[0] = 3
pipe[1] = 4
→作られたパイプ(ファイルディスクリプタ)は現状割り当てられていないfdの中で最小のものを作るとわかった。
dup2コマンド
int fd;
fd = open(output.file, O_WRONLY);
dup2(fd, 1);
execve("/bin/ls", argv, NULL);
output.fileにls -l の結果が書き込まれた
readline history
bash man
みとく記事
brewについて
heredocに関して
このスクラップは2023/06/02にクローズされました