![unistd를 사용하여 입력을 Grep으로 파이프할 수 없습니다.](https://linux55.com/image/225050/unistd%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9E%85%EB%A0%A5%EC%9D%84%20Grep%EC%9C%BC%EB%A1%9C%20%ED%8C%8C%EC%9D%B4%ED%94%84%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
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;
}
내가 가져오는 각 라이브러리에 대해 한 줄을 생성해야 하는데 프로그램을 실행하면 출력이 생성되지 않습니다 sh.c
. 이 기술은 다른 조합(예: "ls|cat" 또는 "echo|cat")과 함께 작동합니다. grep이 파이프를 거부하는 이유가 있나요?