IOパイプを持つシェルを作成しようとしていますが、grepをパイプするときにプログラムが失敗することがわかりました。私のパイプライン技術を簡単に説明するいくつかのコードは次のとおりです。
#include <unistd.h>
#include <stdio.h>
int main(int argc, char** argv){
int pipes[2];
pipe(pipes);
char *argve[5];
// "cat sh.c"
argve[0] = "cat";
argve[1] = "sh.c";
argve[2] = NULL;
if (!fork()){
close(pipes[0]);
dup2(pipes[1],1);
execvp(argve[0],argve);
printf("ERROR\n");
}
close(pipes[1]);
// "grep "include""
argve[0] = "grep";
argve[1] = "\"include\"";
argve[2] = NULL;
if (!fork()){
dup2(pipes[0],0);
execvp(argve[0],argve);
printf("ERROR\n");
}
close(pipes[0]);
int wstatus;
while (wait(&wstatus)>0)
;
return 0;
}
インポートするライブラリごとに1行を生成する必要がありますが、プログラムを実行しても出力は生成されませんsh.c
。この手法は、他の組み合わせ(例:「ls | cat」または「echo | cat」)と連携して機能します。 grepがパイプを拒否する理由はありますか?