Boost C++ Libraries/Boost.Asio

Boost.Asio 색인 - basic_streambuf_ref::const_buffers_type

까마귀75 2021. 1. 18. 11:47
728x90
반응형

basic_streambuf_ref::const_buffers_type

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

typedef basic_streambuf< Allocator >::const_buffers_type const_buffers_type;

유형

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

멤버 함수

이 름 설 명
basic_streambuf [constructor] basic_streambuf 개체를 생성하는 생성자(constructor)이다.
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 클래스의 공개(public) 인터페이스는 다음과 같은 구현 전략을 허용하기 위한 것이다:

  • 단일 연속 문자 배열(a single contiguous character array)은 문자 시퀀스의 크기 변경을 수용하기 위해 필요에 따라 재할당 한다. 이는 현재 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/basic_streambuf.hpp
편의 헤더: boost/asio.hpp

Boost.Asio 홈

728x90
반응형