stdout 버퍼링을 제거하기위한`unbuffer` 또는`stdbuf`? unbuffer (1)와 stdbuf (1)의

unbuffer (1)와 stdbuf (1)의 차이점이 있습니까? 내가 수집 한 것으로부터 unbuffer는 처음에 libc 함수 set (X) buf를 호출 한 다음 물건을 놓는 “최선의 노력”이상을 만드는가?



답변

그들은 완전히 다른 방식으로 작동합니다.

unbuffer 프로그램은 이름 지정된 명령을 실행할 것으로 예상합니다. expect는 자식 프로세스의 stdout에 첨부 할 의사 (pseudo-tty)를 생성하므로 자식은 블록 버퍼링 대신 라인 버퍼링을 사용해야한다고 생각할 수 있습니다. 일부 프로그램은 isatty (stdout)가 true 일 때 동작이 변경되고 다른 프로그램은 그렇지 않으며 어떤 것인지 아닌지를 알기가 매우 어렵습니다.

stdbuf 프로그램은 동적으로로드 된 바이너리에 대해 libstdbuf를 libc 앞에 놓으려고 시도합니다. 여기서 libstdbuf는 libc stdio 호출의 기본 버퍼링 전략을 재정의합니다.

나는 이것을 발견했다.

 apt-get source expect coreutils

각 프로그램의 관련 소스를 읽습니다.


답변