가져:
- 터미널에서는
touch myfile echo some text >> myfile # returns straight away
- 다른 터미널에서는
cat myfile # prints "some text"
- 이제 난 할 수 있어
rm myfile
이제 이:
- 터미널에서
mkfifo mypipe echo some text > mypipe # does not return yet
- 다른 터미널에서
cat mypipe # prints "some text"
echo
첫 번째 터미널로 복귀- 이제 난 할 수 있어
rm myfifo
두 시나리오의 유일한 차이점은 다음과 같습니다.
- 비슷한 일을 하기 위해 다른 명령을 사용하는 것처럼, 다른 것을 모르고 "파일"을 생성 합니다
touch
.mkfifo
- 가장 중요한 것은
echo
읽기 작업이 반환될 때까지 파이프가 반환되지 않는다는 것입니다.
나는 2가 일반 파일에 비해 명명된 파이프를 특별하게 만드는 것이라고 생각합니다.
하지만 명명된 파이프의 특별한 점은 무엇입니까?
프로세스 간 통신에 사용된다는 내용을 읽었지만 프로세스도 일반 파일만 사용할 수 있다고 생각합니다. 하지만 그렇다면 파이프는 존재하지 않을 것이므로 제가 틀렸을 것입니다.
나를 완전히 혼란스럽게 만드는 매우 간단한 예는 다음과 같습니다.
내가 터미널에 있다면
mkfifo mypipe
while true; do date > mypipe ; done
파이프에 계속 쓰고 있지만(내가 알 수 있는 한 덮어쓰기) 파이프에서 한 번 읽으면 예상보다 더 많은 출력이 생성됩니다.
cat myfifo
동일한 날짜를 여러 번 인쇄합니다. 일반적으로 4번, 때로는 5~6번 인쇄합니다.