bash coprocess는 어떻게 파이프라이닝을 달성하나요?

bash coprocess는 어떻게 파이프라이닝을 달성하나요?

참고로 이 구절은남자 난교(강조):

공동 프로세스

coprocess는 coproc 예약어 앞에 오는 쉘 명령입니다. 코프로세스는 & 제어 연산자를 사용하여 명령이 종료된 것처럼 서브셸에서 비동기적으로 실행됩니다.양방향 튜브 포함 실행 쉘과 코프로세스 사이에 설정됩니다.

이제 우리가 알고 있듯이 다른 *nix 시스템과 달리Linux 파이프는 단방향입니다.(또한 참조인적관리(7), 이식성 섹션). 그렇다면 bash coproces는 Linux에서 사용할 수 없는 "양방향 파이프"를 어떻게 구현합니까?

답변1

그것stdin용으로 하나, stdout용으로 하나 만드세요, 같은 방법하위 프로세스를 위한 파이프라인항상 일하고 있습니다. 그렇기 때문에배열에 두 개의 fd가 있습니다.. 각 파이프의 한쪽 끝은 상위 파이프(배열의 FD)에 있고 각 파이프의 한쪽 끝은 하위 파이프(fd 0 및 fd 1, stdin 및 stdout)에 있습니다. 자식 프로세스에 fd 1을 쓰면 뭔가를 읽을 수 있고 COPROC[0], 그 반대의 경우도 표준 입력입니다.

이 설정은 인용한 매뉴얼 페이지 뒷부분의 단락에도 설명되어 있습니다. 특별한 일은 없었고,같은 일을사용표준 pipe기능모든 시스템에서 로컬 파이프에 관계없이 POSIX가 제공하는 것 이상으로 작동합니다.

관련 정보