Boost C++ Libraries/Boost.Asio

Boost.Asio 색인 - streambuf

까마귀75 2021. 3. 5. 15:10
728x90
반응형

streambuf

basic_streambuf의 일반적인 사용을 위한 typedef이다.

typedef basic_streambuf streambuf;

유 형

이 름 설 명
const_buffers_type 입력 시퀀스를 버퍼 목록으로 나타내는 데 사용되는 유형이다.
mutable_buffers_type 출력 시퀀스를 버퍼 목록으로 나타내는 데 사용되는 유형이다.

멤버 함수

이 름 설 명
basic_streambuf
[constructor]
basic_streambuf 개체를 생성한다.
capacity basic_streambuf의 현재 용량을 가져온다.
commit 출력 시퀀스에서 입력 시퀀스로 문자를 이동한다.
consume 입력 시퀀스에서 문자를 제거한다.
data 입력 시퀀스를 나타내는 버퍼의 목옥을 가져온다.
max_size basic_streambuf의 최대 크기를 가져온다.
prepare 주어진 크기의 출력 시퀀스를 나타내는 버퍼 목록을 가져온다.
size 입력 시퀀스의 크기를 가져온다.

보호된(protected) 멤버 함수

이 름 설 명
overflow std::streambuf 동작을 재정의한다.
reserve
underflow std::streambuf 동작을 재정의한다.

basic_streambuf 클래스는 std::streambuf에서 파생되어 streambuf의 입출력 시퀀스를 하나 이상의 문자 배열과 연결한다. 이러한 문자 배열은 basic_streambuf 개체의 내부에 있지만, I/O 작업의 효율적인 사용을 위해서 배열 요소에 대한 직접 액세스를 제공한다. basic_streambuf 개체의 출력 시퀀스에 기록된 문자는 동일한 개체의 입력 시퀀스에 추가된다.

basic_streambuf 클래스의 공용 인터페이스는 다음 구현 전략을 수용하기 위한 것이다:

  • 단일 연속 문자 배열, 문자 시퀀스의 크기 변경을 수용하기 위해 필요에 따라 재할당 된다. 이는 현재 Asio에서 사용되는 구현 방식이다.
  • 동일한 크기의 하나 이상의 문자 배열 시퀀스이다. 문자 시퀀스의 크기 변경을 수용하기 위해 추가 문자 배열 개체가 시퀀스에 추가된다.
  • 다양한 크기의 하나 이상의 문자 배열 시퀀스이다. 문자 시퀀스의 크기 변경을 수용하기 위해 추가 문자 배열 개체가 시퀀스에 추가된다.

basic_streambuf의 생성자는 입출력 시퀀스 크기의 합에 허용되는 최대값을 지정한 size_t 인수를 받는다. basic_streambuf 개체의 수명 동안, 다음의 불변식은 유지된다:

size() <= max_size()

만약 성공한다면 불변식을 위반하게 만드는 모든 멤버 함수는 클래스 std::length_error 예외를 발생할 것이다.

basic_streambuf의 생성자는 Allocator(할당기) 인수를 사용한다. 각 basic_streambuf 개체의 수명 동안, 이 인수의 복사본은 생성자와 모든 멤버 함수가 수행하는 메모리 할당에 사용된다.

예 제

streambuf에서 소켓으로 직접 쓰기:

boost::asio::streambuf b;
std::ostream os(&b);
os << "Hello, World!\n";

// try sending some data in input sequence
size_t n = sock.send(b.data());

b.consume(n); // sent data is removed from input sequence


소켓에서 streambuf를 직접 읽기:

boost::asio::streambuf b;

// reserve 512 bytes in output sequence
boost::asio::streambuf::mutable_buffers_type bufs = b.prepare(512);

size_t n = sock.receive(bufs);

// received data is "committed" from output sequence to input sequence
b.commit(n);

std::istream is(&b);
std::string s;
is >> s;

요구 사항

일반 헤더: boost/asio/streambuf.hpp
편의 헤더: boost/asio.hpp

Boost.Asio 홈

728x90
반응형