분명히 작동하지 않는 명명 된 파이프 / 응답?


1

안타깝게도 stdin에서 직접 데이터를 받아들이지 않는 파이프 라인에 대한 입력을 즉석에서 사전 처리하는 편리한 방법으로 명명 된 파이프를 사용하려고합니다.

어디서나 나는 정보를 찾는다. 기본적으로 같은 요점을 갖는다. 명명 된 파이프는 사용하기 쉽도록 죽어야한다.

요점은 대부분 다음과 같이 작동해야합니다 :

mkfifo mynamedpipe echo "is this working?" > mynamedpipe cat mynamedpipe

내가 달릴 때. mkfifo mynamedpipe, 파이프가 성공적으로 만들어져 표시됩니다. ls *.

하지만 내가 파이프를 쓸 수 있도록 허용 한 후에도 echo "whatever" > mynamedpipe 아무 일도 일어나지 않고 터미널을 멈추게 할 때까지 ctrl+c.

내 로컬 리눅스 머신 (Ubuntu 14.04.5 LTS)뿐만 아니라 공개 서버 (Red Hat Enterprise Linux 7)와 zsh 및 bash에서이 문제가 발생합니다.

여기서 내가 뭘 잘못하고 있니?


1
시험 cat < mynamedpipe. 이 따옴표를 참고하십시오. linuxjournal.com/article/2156 : "주의 깊게 살펴보면, 실행중인 첫 번째 명령이 멈춘 것처럼 보입니다. 이것은 파이프의 다른 쪽 끝이 아직 연결되지 않았기 때문에 발생하며, 커널은 두 번째 프로세스가 파이프를 열 때까지 첫 번째 프로세스를 일시 중단합니다. 유닉스 전문 용어로는 프로세스가 "대기"상태라고한다.
Frank Thomas

나를 위해 물건을 지워 줘서 고마워. 그러나이 문제에 대한 거의 모든 자습서 (또는 적어도 가장 눈에 띄는 Google 히트 곡)가 위에 게시 된 기본 단계를 정확하게 설명하고 문제를 해결하지 않고도 "있는 그대로"작업해야한다는 것은 귀찮은 일입니다. 최근에 바뀐 것입니까?
jov14

독자를 사용해야합니다 ( cat mynamedpipe ) 먼저 . 두 개의 터미널이 필요하다는 뜻입니다. 또한이 냄새는 XY 질문 . 해결하려는 실제 문제에 대해 설명해주십시오. "슬프게도 표준 입력에서 직접 데이터를 받아들이지 않는 파이프 라인"은 무엇입니까?
dirkt

답변:


1

이 게시물은 귀하의 문제와 관련이있는 것 같습니다. Cat을 명명 된 파이프로 연결하면 정지합니다. .

관련 발언은 다음과 같습니다.

  • FIFO에서 뭔가 읽어야합니다.
  • 파이프가 충분히 큰 버퍼로 만들어 졌는지 또는 독자가 차단을 피하기에 충분히 빠름
  • 다음과 같이 파이프를 파일 설명자에 지정해야합니다.

    exec 3<>/tmp/stream_pipe
    

정보에 대해서 감사드립니다. 슬프게도 그 포스터는 버퍼 크기를 변경하려고하면 아무 것도 바뀌지 않는다는 이유로 명명 된 파이프가 나를 대신 할 수있는 대안이 아니라는 것을 의미합니다. stdin에서 읽지 않는 다운 스트림 도구로 플러그 인하는 대안을 찾고 있었기 때문에 파이프가 쓰여지는 동안 필연적으로 소모되는 것은 아닙니다. 파이프가 그런 식으로 행동하는 것은 당연합니다. 그래서 저에게 중간 물리적 인 임시 파일을 쓰고 읽는 것 ...
jov14

명명 된 파이프는 좋지만 유감스럽게도 잠재적으로 매우 큰 데이터를위한 솔루션은 아닙니다.
harrymc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.