다음과 같은 작은 테스트 스크립트가 있습니다.
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")
그러나 나는 그것에 대한 올바른 구문을 모릅니다. 내가 아는 것은 첫 번째 쓰기 호출 블록 전에 읽기 위해 열어야 한다는 것입니다. 위의 내용은 작동하지 않는 것 같습니다.