독자가 없어도 Named Pipe에 뭔가를 쓰는 방법

독자가 없어도 Named Pipe에 뭔가를 쓰는 방법

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

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를 여는 데 사용할 수 있습니다. 연결 자체와 통신하려면 교착 상태를 피하기 위해 매우 주의해야 합니다."

답변2

한 가지 해결책은 같은 줄에 리더를 추가하는 것입니다.

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

하지만 올바른 구문은 모르겠습니다. 제가 아는 것은 첫 번째 쓰기 호출이 차단되기 전에 읽기 위해 열어야 한다는 것뿐입니다. 위의 내용은 작동하지 않는 것 같습니다.

관련 정보