2012-11-24 3 views
0

내가이 명령을 이해하는 데 문제가있어 : 를 터미널 mkfifo pipe1mkfifo pipe2 에서 일을하고 실행 한 후 :유닉스 고양이 명령과 FIFO를

  1. $ echo -n x | cat - pipe1 > pipe2 &

    나는 결과로 얻을 :

    [1] 3526 
    

    시간이 지나면 증가하는 경향이있는 번호입니다.

    나는 실행하면 :

  2. $ cat <pipe2 > pipe1

    출력은 다음과 같습니다 일이 뭐죠

    $ echo -n x | cat - pipe1 > pipe2 & 
    

누군가가 설명 할 수 있습니까?

    pipe2이 이미 있기 때문에 다음에서는 mkfifo로 만들어진 존재하는 경우
  1. 는 지금까지 내가 아는 한, pipe2에 X + pipe1 내용으로 새 파일을 작성해야합니다 첫 번째 명령은 그 출력, 그리고 무엇 무엇을 어떻게해야 ?
  2. 두 번째 명령이 무엇인지 전혀 알지 못합니다. 온라인에서 참조를 찾을 수 없습니다.

이것은 숙제이며 아직 수업을 보지 못했습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

5

각 명령을

echo -n x | cat - pipe1 > pipe2 & 

echo의 출력이 cat에 파이프되도록 명령 시퀀스를 실행하지만 순서가 백그라운드에서 실행됩니다.

[1] 3526 

가 백그라운드 작업이 때문에 FIFO를의 특성, 전체 서브 쉘에 뭔가를 기다리고까지 걸려 작업 ID 1 및 프로세스 ID 3526.임을 나타냅니다 : 쉘과 같은 메시지를 생성 cat 작업을 성공적으로 시작하려면 읽기 위해 pipe2을여십시오. 일단 릴리스되면 cat 명령이 표준 입력에서 한 문자를 읽은 다음 pipe1에서 일부 입력을 기다리는 동안 응답하지 않습니다. 엄밀히 말하면, 그것은 프로세스가 쓰기 위해 pipe2을 열 때까지 기다리는 것을 의미합니다.

작업 번호와 프로세스 ID가 고유하기 때문에이 번호를 늘리십시오.

cat pipe1은 독자적으로 응답해야합니다. 에코 된 명령은 이전 명령을 완료 한 것일 수 있습니다.

$ echo -n x | cat - pipe1 > pipe2 & 
[1] 9304 
$ (echo Hi > pipe1) & 
[2] 9305 
$ sleep 3 
$ jobs 
[1]- Running     echo -n x | cat - pipe1 > pipe2 & 
[2]+ Running     (echo Hi > pipe1) & 
$ cat pipe2 
-n x 
Hi 
[1]- Done     echo -n x | cat - pipe1 > pipe2 
[2]+ Done     (echo Hi > pipe1) 
$ 

내 쉘 (콘) echo -n에게 당신 (아마 bash)와 동일하게 해석하지 않습니다.

+1

한숨. ** + 1 **. 조나단 룰러 (Jonathan Leffler)가 답변을 올리면 질문에 대답하는 데 많은 포인트가 없습니다. – ghoti

+0

우리는 지식을 전파하는 데 도움이되고 경쟁하지는 않습니다. –