일반 파일과 비교하여 명명된 파이프의 특별한 점은 무엇입니까? [복사]

일반 파일과 비교하여 명명된 파이프의 특별한 점은 무엇입니까? [복사]

가져:

  • 터미널에서는
    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

두 시나리오의 유일한 차이점은 다음과 같습니다.

  1. 비슷한 일을 하기 위해 다른 명령을 사용하는 것처럼, 다른 것을 모르고 "파일"을 생성 합니다 touch.mkfifo
  2. 가장 중요한 것은 echo읽기 작업이 반환될 때까지 파이프가 반환되지 않는다는 것입니다.

나는 2가 일반 파일에 비해 명명된 파이프를 특별하게 만드는 것이라고 생각합니다.

하지만 명명된 파이프의 특별한 점은 무엇입니까?

프로세스 간 통신에 사용된다는 내용을 읽었지만 프로세스도 일반 파일만 사용할 수 있다고 생각합니다. 하지만 그렇다면 파이프는 존재하지 않을 것이므로 제가 틀렸을 것입니다.


나를 완전히 혼란스럽게 만드는 매우 간단한 예는 다음과 같습니다.

내가 터미널에 있다면

mkfifo mypipe
while true; do date > mypipe ; done

파이프에 계속 쓰고 있지만(내가 알 수 있는 한 덮어쓰기) 파이프에서 한 번 읽으면 예상보다 더 많은 출력이 생성됩니다.

cat myfifo

동일한 날짜를 여러 번 인쇄합니다. 일반적으로 4번, 때로는 5~6번 인쇄합니다.

관련 정보