std::basic_streambuf
std::basic_streambuf (문자 시퀀스 버퍼)
문자 시퀀스에 대한 입력·출력을 제어하는 클래스예요. 버퍼인 제어된 문자 시퀀스와, 소스·싱크인 연관 문자 시퀀스를 포함·제공해요. 모든 I/O 스트림 객체는 basic_streambuf 기반으로 구현돼요.
출처: cppreference
본문
<streambuf> 헤더에 정의돼 있어요.
template<
class CharT,
class Traits = std::char_traits<CharT>
> class basic_streambuf;
클래스 basic_streambuf는 문자 시퀀스에 대한 입력·출력을 제어해요. 다음을 포함·제공해요.
- 제어된 문자 시퀀스(buffer라고도 함): 입력 연산을 버퍼링하는 입력 시퀀스(get area)와/또는 출력 연산을 버퍼링하는 출력 시퀀스(put area)를 포함할 수 있어요.
- 연관 문자 시퀀스(입력이면 source, 출력이면 sink라고도 함): OS API로 접근하는 개체(파일, TCP 소켓, 직렬 포트, 기타 문자 장치)이거나, 문자 소스·싱크로 해석될 수 있는 객체(
std::vector, 배열, 문자열 리터럴)일 수 있어요.
I/O 스트림 객체 std::basic_istream·std::basic_ostream과 그 파생 객체들(std::ofstream, std::stringstream 등)은 전부 std::basic_streambuf에 의해 구현돼요.
제어된 문자 시퀀스는 항상 다음 여섯 개의 문자 스트림(std::basic_streambuf의 멤버 포인터들)의 어떤 상태를 나타내는 CharT 배열이에요: eback, gptr, egptr(입력용), pbase, pptr, epptr(출력용). Traits::pos_type을 사용해 위치를 나타낼 수 있어요.
멤버 타입
char_type—CharTint_type—Traits::int_typepos_type—Traits::pos_typeoff_type—Traits::off_type
멤버 함수(주요)
- 입력: in_avail, sgetc, sgetn, sbumpc, snextc, sungetc, sputbackc, underflow, uflow, xsgetn, sgeta...
- 출력: sputc, sputn, overflow, xsputn, sputbackc...
- 위치·동기화: pubseekoff, pubseekpos, pubsetbuf, pubsync, seekoff, seekpos, setbuf, sync.
- 버퍼 영역 접근: eback, gptr, egptr, pbase, pptr, epptr, setg, setp, gbump, pbump.
예제
#include <iostream>
#include <streambuf>
int main()
{
// 스트림 버퍼를 직접 사용해 출력
std::streambuf* buf = std::cout.rdbuf();
buf->sputn("Hello, streambuf!\n", 18);
}