2016-12-09 6 views
0

유닉스에서, 나는이 FIFO를했습니다 처음 표시되지 않습니다 내가 tail 그것을 읽으려고 :
읽기 FIFO는

mkfifo fifo.file 
tail -f fifo.file 

가 그럼 난 다른 프로세스에서에 메시지를 작성하려고 그래서 나는 다음과 같이 수행

abc 
def 
:

cat > fifo.file 

은 그 때 나는 다음과 같은 메시지를 입력 0

입력하기 전에 Ctrl-D, 첫 번째 프로세스 (tail -f fifo.file) 때 아무 것도 인쇄되지 않습니다.
그런 다음 Ctrl-D을 입력하면 위의 두 줄이 인쇄됩니다.

지금 cat > fifo.file을 다시 입력하면 qwe과 같은 한 줄을 입력하고 줄의 끝에 Enter을 입력하면이 문자열이 첫 번째 프로세스에서 바로 인쇄됩니다.

나는 같은 명령으로 두 가지 다른 행동을하는 이유가 궁금합니다.
첫 번째없이 cat을 입력하면 두 번째 동작이 가능합니까? Ctrl-D 대신 Enter을 입력하면 메시지가 표시됩니다.

답변

0

이것은 단지 tail의 작동 방식입니다. 기본적으로는 Ctrl-D이 효과적으로 터미널에 보내는 EOF가 발생할 때만 지정된 파일 내용을 출력합니다. 그리고 -f 스위치를 사용하면 tail을 종료하지 않고 그대로 계속 읽을 수 있습니다.

아무런 의미가 없어도 스위치 tail은 EOF를 출력해야합니다.

term_1$ mkfifo fifo.file 
term_1$ cat < fifo.file 

... 

term_2$ cat > fifo.file 
:

그냥 간단한 cat 대신 tail의를 사용할 수 있습니다이 테스트