GNU OS의 버퍼링된(명명된) 파이프

GNU OS의 버퍼링된(명명된) 파이프

GNU OS에서는 다른 프로세스가 동시에(동일한 파이프에서) 동일한 데이터를 읽는 경우에만 프로세스가 파이프에 데이터를 쓸 수 있습니다.

두 번째 프로세스가 읽을 때까지 첫 번째 프로세스가 데이터를 쓰고 버퍼링할 수 있도록 하는 파이프와 같은 것이 있습니까?

답변1

명명된 파이프(fifo)는 어느 정도 원하는 작업을 수행할 수 있지만 몇 가지 주의 사항이 있습니다.

  1. 판독기가 존재하기 전에 파이프에 쓸 수 있으려면 작성자가 읽고 쓰기 위해 FIFO를 열어야 합니다. 그렇지 않으면 호출이 open차단됩니다. 셸에서는 다음과 같이 보일 수 있습니다.

    exec 3<>/path/to/pipe
    echo "foo" >&3
    cat <&3
    

    보시다시피 리더가 오기 전에 파이프에 데이터를 쓸 수 있습니다. 파이프에서 데이터를 읽자마자 내가 쓴 메시지가 이미 거기에 있습니다.

  2. 파이프가 가득 차면 파이프에 대한 쓰기가 결국 차단됩니다. ~에 따르면파이프(7)리눅스의 경우:

파이프라인의 용량은 제한되어 있습니다. 파이프가 가득 차면 write(2)는 O_NONBLOCK 플래그 설정 여부에 따라 차단되거나 실패합니다(아래 참조). 구현마다 파이프라인 용량에 대한 제한이 다릅니다. 애플리케이션은 특정 용량에 의존해서는 안 됩니다. 애플리케이션은 읽기 프로세스에서 데이터가 사용 가능해지는 즉시 이를 사용하여 쓰기 프로세스가 차단된 상태로 유지되지 않도록 설계해야 합니다.

2.6.11 이전의 Linux 버전에서는 파이프 용량이 시스템 페이지 크기(예: i386의 4096바이트)와 동일했습니다. Linux 2.6.11부터 파이프 용량은 65536바이트입니다.

사용 사례에 따라 메시지 대기열 사용을 고려할 수도 있습니다. 커널은 메시지 큐를 제공합니다. Linux에서는 다음을 참조하세요.mq_개요(7)좋은 개요를 얻으려면. 또는 RabbitMQ와 같은 서비스는 네트워크 전반의 유용성을 포함하여 다양한 기능 세트가 포함된 메시지 대기열을 제공합니다.

답변2

이 질문은 이제 꽤 오래되었습니다. 하지만완충기명령은 파이프에 데이터를 버퍼링하는 기능을 제공합니다.

답변3

네 말 뜻은http://en.wikipedia.org/wiki/Named_pipe? 귀하의 요구 사항에 따라 작동합니다.

관련 정보