파이핑을 지원하는 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);
}
내가, 초보 프로그래머입니다, 내가 뭔가를 프로그래밍하고 때 나는,이 경우 분명되고, I를에 대해 잘 모르는 정말 쉽고 구체적인 것을 시작해서 거기에서 지어지기를 좋아합니다.
그래서 파이프 라인에서 3 가지 이상의 다른 명령을 구현할 수 있기 전에 "ls names.txt | sort"또는 비슷한 이름을 계산할 수 있기를 원합니다. names.txt는 이름이 알파벳순으로 나열된 파일입니다 정렬되지 않은.
코드가 업데이트되었지만 여전히 작동하지 않습니다.
감사합니다.
나는 파이프의 문을 코드에 추가하는 것을 잊어 버렸다. 지금 무엇을 제안하나요? 감사. – nunos
나는 dup2 (0, fd [0])가 stdout으로 가야 할 것을 fd [0]로 복사한다고 생각했는데, 그것은 프로세스의 입력이다. 나는 내가 원하는 것, 맞지? – nunos
@nunos : dup2()는 복사를하지 않고 파일 설명자를 복사합니다 *. fd [0]은 새로 생성 된 파이프의 한쪽 끝의 fd이기 때문에 dup2()가 수행 할 것처럼 닫히지는 않습니다. – unwind