stdout
glibc가 및에 대해 동일한 버퍼를 사용하도록 강제할 수 있습니까 stderr
?
두 개의 출력이 나오는 경우 tee
:
./tests/tests 2>&1 | tee log
혼합된 메시지가 나타납니다(즉, 메시지는 내부적으로 정렬되지만 stdout
서로 stderr
간에 정렬되지는 않습니다). 버퍼링을 끌 수 있습니다.
stdbuf -i0 -o0 -e0 ./tests/tests 2>&1 | tee log
그러나 이로 인해 엄청난 속도 저하가 발생합니다(수백MB의 로그를 푸시하고 있습니다). 버퍼링이 가능하지만 stdout
와 사이에 공유될 수 있습니까 stderr
? FD 1
와 2
동일한 출력을 가리킵니다(예제에 표시된 대로).
답변1
어떤 경우에 버퍼를 동일하게 만들고 싶은지 잘 모르겠지만 C 프로그램에서 작성자는 라이브러리 함수 계열을 사용하여 버퍼 setbuf()
에 동일한 .stderr
stdout
setbuf
셸을 사용하여 다른 프로그램을 호출하면 됩니다. 함수 계열에서 암시하는 이유( 인스턴스별 메모리(버퍼) 구현 및 보유) 로 인해 이 작업을 수행할 수 없을 것 같습니다 . 프로그램이 특정 방식으로 작성되지 않은 경우, 즉 버퍼가 및 와 동일한 메모리 블록으로 설정되지 않은 경우 쉘은 프로그램이 공통 버퍼링을 수행하도록 할 수 없습니다.FILE *stderr
FILE *stdout
stdout
stderr