パイピングをサポートする Linux シェルを実装しようとしています。私はすでに簡単なコマンド、バックグラウンドで実行されているコマンド、リダイレクトを実行しましたが、パイプがまだありません。
私はすでにそれについて読んで、コードのスニペットを見ましたが、まだ実用的な解決策を整理することができませんでした.
私がこれまでに持っているもの:
int fd[2];
pipe(fd);
pid_t pid = fork();
if (pid == -1)
return -1;
if (pid == 0)
{
close(fd[1]); //close write to pipe, in child
execlp("cat", "cat", "names.txt", NULL);
}
else
{
close(fd[0]); //close read from pipe, in parent
execlp("sort", "sort", NULL);
}
おそらくおわかりのように、私は初心者のプログラマーです。何かをプログラミングしているときは、あまりよく知りませんが、これは明らかにそうであり、非常に簡単で具体的なものから始めて、そこから構築するのが好きです。
したがって、パイプラインで 3 つ以上の異なるコマンドを実装できるようになる前に、「ls names.txt | sort」または類似のものを計算できるようにしたいと考えています。この場合、names.txt はアルファベット順に並べられていない名前のファイルです。
コードを更新しましたが、まだ機能しません。
ありがとう。