답변:
파이프는 단순히 0 (stdin)과 다른 파일 디스크립터에 바인드됩니다.
$ echo <(true)
/dev/fd/63
$ echo <(true) <(true)
/dev/fd/63 /dev/fd/62
물론 프로세스는 한 번에 둘 이상의 열린 파일 설명자를 가질 수 있으므로 문제가 없습니다.
pipe()시스템 호출에 의해 생성 된 파이프 일뿐 입니다.
pipe()서브 프로세스를 사용하여 익명 파이프를 작성하고 분기합니다. 주요 과정은 수행 익명 파이프를 사용하는 경우 추가 파일 기술자를 열 수 있습니다. 이러한 추가 파일 디스크립터는 형식으로 전달되며 /dev/fd/...프로세스는 일반적으로 이러한 파일 이름을 사용하여 파일 디스크립터 를 열기 만합니다. 이로 인해 dup()더 많은 파일 디스크립터가 생성됩니다. 프로세스는 또한 공개 호출없이 명명 된 파일 디스크립터를 즉시 사용할 수 있습니다.
a호출했으며 ./a <(ls)파일 목록을 성공적으로 인쇄하여 명명 된 파일 디 립터 (내 경우에는 63)가 이미 열려 있음을 증명합니다. bash는 Linux와 다른 아키텍처의 임시 디렉토리에서 명명 된 파이프를 사용할 수 있으며,이 경우 기본 프로세스를 시작할 때 추가 파일 디스크립터가 열리지 않습니다.
bash입니다.