stdbuf 명령의 매뉴얼 페이지에는 라인 버퍼링 모드가 표준 입력 버퍼링 옵션으로 효과가 없다고 명시되어 있습니다. 그 이유는 무엇입니까?
tail -f access.log | stdbuf -iL cut -d' ' -f1 | uniq
stdbuf: line buffering stdin is meaningless
Try `stdbuf --help' for more information.
답변1
stdbuf의 작성자로서 "stdio 입력 버퍼링 문제" 섹션으로 안내하겠습니다.http://www.pixelbeat.org/programming/stdio_buffering/
답변2
간단히 말해서, stdbuf는 stdio 기능을 둘러싼 래퍼입니다. 입력 스트림에 대한 라인 버퍼링은 stdio에 정의되어 있지 않습니다. 이것이 의미하는 바에 대한 표준 문서를 찾을 수 없으므로 표준에 관한 한 사실상 의미가 없습니다.
stdout 라인 버퍼링과 유사한 동작을 가정할 때, stdin의 라인 버퍼링은 각 문자 읽기에 대해 read()를 한 번 호출해야 합니다. 설명자에서 개행 문자를 읽지 않는다는 것을 보장할 수 있는 다른 방법이 없기 때문입니다. 버퍼링의 목적은 시스템 호출 수를 줄이는 것이므로 stdio 라이브러리가 이를 구현하지 않는 것은 놀라운 일이 아닙니다.