누구나 cerr cout과 clog의 차이점을 설명 할 수 있으며 왜 다른 객체가 제안됩니까?cerr cout 및 clog에 관한 질문
1) cout을 리디렉션 할 수 있지만 cerr는)
이 없습니다 버퍼를 사용할 수 있습니다 방해 :
나는 차이점은 다음과 같습니다 알고있다.
2 점에 대해 혼란 스럽습니다. 누구든지 더 자세히 설명해 주시면 감사하겠습니다.
누구나 cerr cout과 clog의 차이점을 설명 할 수 있으며 왜 다른 객체가 제안됩니까?cerr cout 및 clog에 관한 질문
1) cout을 리디렉션 할 수 있지만 cerr는)
이 없습니다 버퍼를 사용할 수 있습니다 방해 :
나는 차이점은 다음과 같습니다 알고있다.
2 점에 대해 혼란 스럽습니다. 누구든지 더 자세히 설명해 주시면 감사하겠습니다.
버퍼링 된 출력은 일반적으로 버퍼링되지 않은 것보다 훨씬 빠릅니다. 따라서 로그에 방대한 양의 데이터를 빠르게 기록하려면 (실제로 실제로 끝났는지 신경 쓰지 않아도됩니다), cerr보다는 clog를 사용하십시오.
모든 스트림은 보통 유능한 운영 체제라고 가정 할 때 일반적으로 리디렉션 될 수 있지만 "리디렉션"과 같은 개념이없는 C++ 표준을 초과합니다.
cerr/non-buffered-io의 위쪽면에 약간의 정교함을 추가 할 수 있습니다. 즉, 쓰기 작업 직후에 문제가 발생하더라도 스트림이 기록됩니다. –
@RaphaelSP 그게 무슨 뜻인지 "(하지만 실제로 거기에 끝나면 상관 없어)" –
@ Neeil : OP는 겉으로보기에는 버퍼링이 무엇인지 혼란 스럽습니다. –
둘 다 리디렉션 될 수 있습니다.
대부분의 구현에서 cerr은 버퍼링되지 않으며 공식적인 POSIX 요구 사항인지는 확실하지 않지만 버퍼링 된 오류 스트림이있는 것이 좋습니다.
개별 스트림이있는 이유는 유닉스 철학에서 한 프로그램의 출력이 다음 프로그램에 대한 입력이라는 것입니다. 'ls'가 곧바로 'sort'로 진행된다면 콘솔에 오류가 나타나기 쉽습니다. 입력이 오류 메시지이거나 정렬 할 텍스트의 일부인지 이해하기 위해 정렬을 작성해야합니다.
출력을 버퍼링하거나 버퍼링 할 수 없습니다. 버퍼링 된 출력을 사용하면 구현시 디스크에 (또는 어디서든) 쓸 때까지 모든 출력을 절약 할 수 있습니다. 이것은 훌륭하고 효율적이지만 프로그램이 충돌하면 일부 출력이 손실 될 가능성이 큽니다. 구현시 버퍼가없는 출력을 디스크에 씁니다. 디스크 쓰기가 많으면 속도가 느려질 수 있지만 쓰기가 진행되는 동안 프로그램 충돌이 발생하지 않으면 디스크에 기록됩니다.
표준 출력과 표준 오류 사이에는 실제 기능상의 차이점이 없습니다. 그것들은 별개로 리디렉션 될 수있는 단지 두 개의 다른 출력 스트림입니다. 유닉스 툴을 함께 사용하는 철학은 표준 출력이 다음 툴의 입력으로 갈 수있는 적절한 출력을 가지게 될 것이고, 이것은 오류 메시지를위한 별도의 스트림이 필요하다는 것을 의미한다.
따라서 cout
은 표준 출력에 쓰고 버퍼링됩니다. 이것을 정상적인 출력에 사용하십시오. cerr
은 표준 오류 스트림에 쓰고 버퍼링되지 않습니다. 오류 메시지에 사용하십시오. clog
은 표준 오류 스트림에 기록하지만 버퍼됩니다. 이것은 표준 출력을 방해하지 않기 때문에 실행 로깅에 유용하지만 효율적입니다 (프로그램 충돌시 로그 끝이 손실 될 수있는 비용으로).
cout-Screen output(stdout)
clog-Buffered output of standard error(stderr)
cerr-Standard error device output (stderr)
버퍼링 된 출력과 버퍼링되지 않은 출력을 사용하는 주된 이유 중 하나는 프로그램 충돌을 예로들 수 있습니다.
로그 파일에 무엇인가를 출력하는 프로그램을 고려하십시오. 그리고 갑자기 프로그램이 추락했습니다. 이 시점에서 어떤 오류로 인해 오류가 발생했는지 파악하는 데 관심이있을 수 있지만 모든 로그 및 오류에 대해 clog (버퍼링 된)를 사용했다면 프로그램이 충돌했을 때 버퍼에 남아있을 수 있으므로이 모든 정보가 표시되지 않을 수도 있습니다. 버퍼도 손실됩니다.
따라서 오류가 발생하는 경우 cerr
이 주로 버퍼링되지 않으므로 주로 사용됩니다. 버퍼에 있었기 때문에 프로그램 오류가 발생했을 때 중대한 오류가 없어지면 아무런 문제가 없습니다.
누가 cer를 리디렉션 할 수 없다고 말하는가? 나는 항상 그것을한다! –