Linux 커널에서 파이프가 구현되는 방법에 대해 읽고 있었고 이해를 확인하고 싶었습니다. 내가 틀렸다면 정확한 설명이있는 답이 선택됩니다.
- Linux에는 커널에 마운트 된 pipefs라는 VFS가 있습니다 (사용자 공간이 아님).
- pipefs는 하나의 수퍼 블록을 가지며 자체 루트 (
pipe:
)에 마운트됩니다/
- 대부분의 파일 시스템과 달리 pipefs는 직접 볼 수 없습니다
- pipefs의 항목은
pipe(2)
syscall을 통해 이루어집니다 pipe(2)
와 배관 용 쉘에서 사용하는 시스템 콜|
(다른 프로세스에서 수동 또는) 연산자는 일반 파일처럼 거의 작동 pipefs에 새 파일을 작성- 파이프 연산자의 왼쪽에있는
stdout
파일이 pipefs에서 작성된 임시 파일로 경로 재 지정되었습니다. - 파이프 연산자의 오른쪽
stdin
에있는 파일은 pipefs의 파일로 설정되어 있습니다. - pipefs는 메모리에 저장되고 커널 마법을 통해 저장됩니다.
파이프 (예 :)가 어떻게 ls -la | less
작동 하는지에 대한이 설명이 정확합니까?
내가 이해하지 못하는 한 가지는 bash와 같은 것이 프로세스를 설정하는 방법 stdin
또는 stdout
에서 반환 한 파일 설명자 pipe(2)
입니다. 나는 아직 그것에 대해 아무것도 찾을 수 없었습니다.
그렇습니다.
—
Brandon Wamboldt
|
운영자가 pipe(2)
bash처럼 프로세스로 호출 한다고 가정하면서 하위 수준 작업을 구체적으로 언급하고 있습니다.
pipe()
지원을 (그 기계와 함께 커널 호출pipefs
등)이보다 훨씬 낮은 수준이다|
쉘에서 제공하는 연산자. 후자는 일반적으로 전자를 사용하여 구현되지만 반드시 그럴 필요는 없습니다.