리더 없이도 명명된 파이프에 쓰는 방법

리더 없이도 명명된 파이프에 쓰는 방법

다음과 같은 작은 테스트 스크립트가 있습니다.

rm fooo | cat
mkfifo fooo
echo 'bar' > fooo  # blocks here
echo 'done'

나는 명명된 파이프에서 아무도 읽지 않기 때문에 그때까지 쓰기 호출이 차단될 것이라고 추측합니다.

독자가 없어도 독자가 없는지 작성하거나 확인할 수 있는 방법이 있나요?

답변1

~에 따르면https://man7.org/linux/man-pages/man7/fifo.7.html:

" Linux에서는 읽기 및 쓰기를 위해 FIFO를 여는 것이 차단 모드와 비차단 모드 모두에서 성공합니다. 이 동작은 POSIX에서 정의되지 않습니다. 이는 리더를 사용할 수 없을 때 쓰기를 위해 FIFO를 여는 데 사용할 수 있습니다. FIFO 자신과 통신하려면 교착 상태를 피하기 위해 연결에 매우 주의해야 합니다."

답변2

한 가지 해결책은 같은 줄에 판독기를 추가하는 것입니다.

 echo "unlocked" > "$fifo" > >(read line; echo "$line")

그러나 나는 그것에 대한 올바른 구문을 모릅니다. 내가 아는 것은 첫 번째 쓰기 호출 블록 전에 읽기 위해 열어야 한다는 것입니다. 위의 내용은 작동하지 않는 것 같습니다.

관련 정보