이 프로그래밍 컨텍스트에서는 표준 I를 사용하여 기존 버퍼에 데이터를 직접 쓰는 것을 목표로 합니다. /O 스트림. pubsetbuf() 메서드를 사용하여 이를 수행하는 방법을 살펴보겠습니다.
C 표준 라이브러리의 스트림 버퍼에 대한 기본 클래스인 streambuf의 pubsetbuf() 메서드 , 외부에서 할당된 버퍼를 스트림에 제공할 수 있습니다. 그러나 표준 라이브러리의 Microsoft Visual Studio 2008 구현에서 이 방법은 버퍼 할당을 수행하지 않습니다.
이 문제를 피하기 위해 다음을 만들 수 있습니다. 주어진 버퍼를 가리키도록 내부 포인터를 초기화하는 사용자 정의 streambuf 구현입니다. 다음은 이를 수행하는 템플릿 기반 streambuf입니다.
template <typename char_type> struct ostreambuf : public std::basic_streambuf<char_type, std::char_traits<char_type>> { ostreambuf(char_type* buffer, std::streamsize bufferLength) { // Initialize internal buffer pointers to the provided buffer setp(buffer, buffer + bufferLength); } };
사용자 정의 streambuf를 활용하여 이제 외부 버퍼에 직접 쓰도록 코드를 수정할 수 있습니다.
void FillBuffer(char* buffer, unsigned int size) { ostreambuf<char> ostreamBuffer(buffer, size); std::ostream messageStream(&ostreamBuffer); messageStream << "Hello" << std::endl; messageStream << "World!" << std::endl; }
이 접근 방식은 원하는 대로 중간 복사 없이 지정된 버퍼에 데이터를 효과적으로 씁니다.
위 내용은 C 표준 스트림을 사용하여 사용자 제공 버퍼에 직접 쓸 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!