아래 코드에서 p00
은 mkfifo p00
으로 만든 명명 된 파이프입니다.사용 가능한 경우 stdin에서 행을 읽는 방법 (다른 방법으로 차단)?
콘솔 1에서, I는 실행 :
% perl -ne 'print "PERL: $_"' < p00
이어서, 반면 상기 I는 결과
% seq 3 > p00
도망 콘솔 2 (예상) 블록은이 콘솔에 나타난 다음 1 :
PERL: 1
PERL: 2
PERL: 3
%
이것은 이었다 내가 홉 있었다 거의 결과 달성하기 위하여, 제 3의 선을 인쇄 한 후에 perl
원본이 끝났다는 사실을 제외하고는, 즉시 그렇지 않으면 사용할 수있게 및 블록로 을 :
나는 스크립트 ("PERL"접두어) 라인을 울리는 계속합니다.
한 - 라이너의 다음 변형 위의 피상적 원하는 동작과 유사합니다
perl -e 'while (1) { print "PERL: $_" while <>; sleep 1 }' < p00
을 ...하지만 입력을 기다리는 동안은 차단하지 않습니다 있기 때문에, 실제 거래 아니다, 사용할 수있게되자 마자 그 입력을 되풀이하지도 않는다.
참고 :
- 이 질문 뒤에 동기는 교육 (광산, 즉)와 불과하다; 실용적인 문제를 풀려고하지 않습니다. 나는 더 많은 펄 (유닉스)을 배우려고하고있다.
- 이 질문이 unix.se.com에 더 적합한 지 확실하지 않았습니다. 나는 그곳에 다시 게시하게되어 기쁘다. 바로 알려주세요.
이것은 'fifo'가 동작하는 방식입니다. 일단 writer가 그것을 닫으면, 독자는'EOF'를 얻습니다. 독자는 아마도 'fifo'를 다시 열어야하지만 쉘 리다이렉션으로는 할 수 없다. –
@ MaximYegorushkin : 당신의 의견은 내가해야만하는 것이'sleep 1'을 없애는 것이라는 것을 깨달았습니다! 그런 다음 내가 게시 한 두 번째 버전이 원하는대로 정확하게 수행됩니다. 감사! – kjo