我正在尝试编写一个带有 IO 管道的 shell,我注意到该程序在管道输入 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;
}
当该程序应该为我导入的每个库生成一行时,执行该程序不会产生任何输出sh.c
。此技术适用于其他组合(例如“ls | cat”或“echo | cat”)。 grep 拒绝管道有什么原因吗?