stdbuf --help
(GNU)의 출력에서:
Usage: stdbuf OPTION... COMMAND
Run COMMAND, with modified buffering operations for its standard streams.
...
NOTE: If COMMAND adjusts the buffering of its standard streams ('tee' does
for example) then that will override corresponding changes by 'stdbuf'.
Also some filters (like 'dd' and 'cat' etc.) don't use streams for I/O,
and are thus unaffected by 'stdbuf' settings.
이 맥락에서 "I/O 스트림"의 정확한 정의가 무엇인지, 그리고 그것이 정확히 어떻게 적용되는지 cat
혼란스럽습니다 . 표준 I/O 스트림을 사용하지 않는 경우 무엇을 사용합니까? 관련 매뉴얼 페이지와 웹 검색에서는 추가 통찰력을 제공하지 못했습니다.
답변1
dd
그리고 버퍼링된 C stdio 함수( , , , ) 대신 및 시스템 호출을 직접 cat
사용하므로 stdio에 대한 변경 사항이 영향을 미치지 않습니다.read(2)
write(2)
fread(3)
fwrite(3)
printf(3)
stdbuf(1)
기본적으로 프로그램에서 사용하는 버퍼링 전략이 아닌 사용자가 요구하는 버퍼링 전략을 사용하기 위해 stdio의 일부 기능을 재정의하는 작은 동적 라이브러리(Mac LD_PRELOAD
또는 에서 사용)를 미리 로드하여 작동합니다.DYLD_INSERT_LIBRARIES
답변2
stdbuf
수동좀 더 명확하게 말하면:
주문하다프로그램 이름으로 시작해야 합니다.
- 입력/출력에 ISO C
FILE
스트림을 사용합니다(프로그램을 참고하세요dd
.cat
이렇게 하지 마세요).- 표준 스트림의 버퍼링을 조정하지 않습니다(이 프로그램은
tee
이 범주에 속하지 않습니다).
ISO C FILE
스트림은 다음에서 반환된 것과 같은 스트림입니다.fopen
, 상대적open
. 표준 입력, 출력 및/또는 오류를 중심으로 C 라이브러리의 래핑된 스트림을 조정하는 라이브러리를 stdbuf
미리 로드하여 작동합니다 . 이러한 스트림을 사용하지 않는 프로그램은 영향을 받지 않습니다. 예를 들어 GNU는libstdbuf
FILE
cat
표준 입력 파일 설명자 또는 다음에 의해 반환된 파일 설명자open
.