다음을 통해 공유


strstreambuf 클래스

char 배열 개체에 저장된 요소의 시퀀스로/에서 요소의 전송을 제어하는 스트림 버퍼를 설명합니다.

구문

class strstreambuf : public streambuf

설명

개체 생성 방법에 따라 시퀀스의 변경 내용을 수용하도록 필요에 따라 개체를 할당, 확장 및 해제할 수 있습니다.

strstreambuf 클래스의 개체는 모드 정보의 여러 비트를 해당 strstreambuf 모드로 저장합니다. 이러한 비트는 제어되는 시퀀스가 다음과 같은지 여부를 나타냅니다.

  • 할당되었으며 결국 해제해야 하는지 여부

  • 수정할 수 있는지 여부

  • 스토리지를 다시 할당하여 확장 가능합니다.

  • 고정되어 개체가 아닌 에이전시에서 해당 개체를 삭제하거나 해제(할당된 경우)하기 전에 고정 해제해야 하는지 여부

고정된 제어되는 시퀀스는 이러한 별도 모드 비트의 상태에 관계없이 수정하거나 확장할 수 없습니다.

개체는 strstreambuf 할당을 제어하는 두 함수에 대한 포인터를 저장합니다. null 포인터인 경우 개체가 제어되는 시퀀스에 대한 스토리지를 할당 및 해제하는 고유한 메서드를 만듭니다.

참고 항목

이 클래스는 사용되지 않습니다. 대신 stringbuf 또는 wstringbuf를 사용하는 것이 좋습니다.

생성자

생성자 Description
strstreambuf strstreambuf 형식의 개체를 생성합니다.

멤버 함수

멤버 함수 설명
freeze 스트림 버퍼 작업을 통해 스트림 버퍼를 사용할 수 없게 합니다.
overflow 가득 찬 버퍼에 새 문자를 삽입할 때 호출할 수 있는 보호된 가상 함수입니다.
pbackfail 요소를 입력 스트림에 다시 넣은 후 다음 포인터에서 가리키는 현재 요소로 설정하려고 하는 보호된 가상 멤버 함수입니다.
pcount 제어되는 시퀀스에 기록되는 요소 수의 개수를 반환합니다.
seekoff 제어되는 스트림의 현재 위치를 변경하려고 하는 보호된 가상 멤버 함수입니다.
seekpos 제어되는 스트림의 현재 위치를 변경하려고 하는 보호된 가상 멤버 함수입니다.
str freeze를 호출한 다음 제어되는 시퀀스의 시작 부분에 대한 포인터를 반환합니다.
underflow 입력 스트림에서 현재 요소를 추출하는 보호된 가상 함수입니다.

요구 사항

헤더:<strstream>

네임스페이스: std

strstreambuf::freeze

스트림 버퍼 작업을 통해 스트림 버퍼를 사용할 수 없게 합니다.

void freeze(bool _Freezeit = true);

매개 변수

_Freezeit
스트림을 고정할지를 나타내는 bool입니다.

설명

_Freezeit true이면 함수는 저장된 strstreambuf 모드를 변경하여 제어된 시퀀스를 고정합니다. 그렇지 않은 경우에는 제어되는 시퀀스를 고정하지 않습니다.

strfreeze를 의미합니다.

참고 항목

고정된 버퍼는 strstreambuf 소멸 중에 해제되지 않습니다. 메모리 누수를 방지하려면 버퍼를 해제하기 전에 고정을 취소해야 합니다.

예시

// strstreambuf_freeze.cpp
// compile with: /EHsc

#include <iostream>
#include <strstream>

using namespace std;

void report(strstream &x)
{
    if (!x.good())
        cout << "stream bad" << endl;
    else
        cout << "stream good" << endl;
}

int main()
{
    strstream x;

    x << "test1";
    cout << "before freeze: ";
    report(x);

    // Calling str freezes stream.
    cout.write(x.rdbuf()->str(), 5) << endl;
    cout << "after freeze: ";
    report(x);

    // Stream is bad now, wrote on frozen stream
    x << "test1.5";
    cout << "after write to frozen stream: ";
    report(x);

    // Unfreeze stream, but it is still bad
    x.rdbuf()->freeze(false);
    cout << "after unfreezing stream: ";
    report(x);

    // Clear stream
    x.clear();
    cout << "after clearing stream: ";
    report(x);

    x << "test3";
    cout.write(x.rdbuf()->str(), 10) << endl;

    // Clean up.  Failure to unfreeze stream will cause a
    // memory leak.
    x.rdbuf()->freeze(false);
}
before freeze: stream good
test1
after freeze: stream good
after write to frozen stream: stream bad
after unfreezing stream: stream bad
after clearing stream: stream good
test1test3

strstreambuf::overflow

가득 찬 버퍼에 새 문자를 삽입할 때 호출할 수 있는 보호된 가상 함수입니다.

virtual int overflow(int _Meta = EOF);

매개 변수

_메타
버퍼에 삽입할 문자 또는 EOF입니다.

Return Value

함수는 정상적으로 실행되지 않으면 EOF를 반환합니다. 그렇지 않으면 _Meta EOFEOF == 경우 . 그렇지 않으면 _Meta 반환합니다.

설명

!= EOF_Meta 경우 보호된 가상 멤버 함수가 출력 버퍼에 요소를 (char)_Meta 삽입하려고 합니다. 수행할 수 있는 방법은 다양합니다.

  • 쓰기 위치를 사용할 수 있는 경우 요소를 쓰기 위칭에 저장하고 출력 버퍼에 대해 다음 포인터를 증분할 수 있습니다.

  • 저장된 strstreambuf 모드에서 제어되는 시퀀스가 수정/확장 가능하며 고정되어 있지 않음을 나타내면 함수는 출력 버퍼에 대해 쓰기 위치를 새로 할당하여 사용 가능하도록 설정할 수 있습니다. 이러한 방식으로 출력 버퍼를 확장하면 연결된 입력 버퍼도 확장됩니다.

strstreambuf::p backfail

요소를 입력 스트림에 다시 넣은 후 다음 포인터에서 가리키는 현재 요소로 설정하려고 하는 보호된 가상 구성원 함수입니다.

virtual int pbackfail(int _Meta = EOF);

매개 변수

_메타
버퍼에 삽입할 문자 또는 EOF입니다.

Return Value

함수는 정상적으로 실행되지 않으면 EOF를 반환합니다. 그렇지 않으면 _Meta EOFEOF == 경우 . 그렇지 않으면 _Meta 반환합니다.

설명

보호된 가상 구성원 함수는 요소를 입력 버퍼에 다시 넣은 후 다음 포인터에서 가리키는 현재 요소로 설정하려고 합니다.

_Meta == EOF 경우 푸시백할 요소는 현재 요소 앞에 이미 있는 요소입니다. 그렇지 않으면 해당 요소가 .로 대체됩니다 ch = (char)_Meta. 함수는 여러 가지 방법으로 요소를 다시 넣을 수 있습니다.

  • putback 위치를 사용할 수 있고 거기에 저장된 요소가 같은 ch지 비교하면 입력 버퍼에 대한 다음 포인터를 감소시킬 수 있습니다.

  • 퍼트백 위치를 사용할 수 있고 strstreambuf 모드에서 제어되는 시퀀스를 수정할 수 있다고 말하면 함수는 putback 위치에 저장 ch 하고 입력 버퍼에 대한 다음 포인터를 감소시킬 수 있습니다.

strstreambuf::p count

제어되는 시퀀스에 기록되는 요소 수의 개수를 반환합니다.

streamsize pcount() const;

Return Value

제어되는 시퀀스에 기록되는 요소 수의 개수입니다.

설명

구체적으로 pptr이 null 포인터이면 함수는 0을 반환합니다. 그렇지 않으면 pbase를 반환합니다pptr - .

예시

// strstreambuf_pcount.cpp
// compile with: /EHsc
#include <iostream>
#include <strstream>
using namespace std;

int main( )
{
   strstream x;
   x << "test1";
   cout << x.rdbuf( )->pcount( ) << endl;
   x << "test2";
   cout << x.rdbuf( )->pcount( ) << endl;
}

strstreambuf::seekoff

제어되는 스트림의 현재 위치를 변경하려고 하는 보호된 가상 멤버 함수입니다.

virtual streampos seekoff(streamoff _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Which = ios_base::in | ios_base::out);

매개 변수

_Off
_Way 기준으로 검색할 위치입니다.

_방법
오프셋 작업의 시작 지점입니다. 가능한 값은 seekdir을 참조하세요.

_Which
포인터 위치에 대한 모드를 지정합니다. 기본적으로는 읽기 및 쓰기 위치를 수정할 수 있습니다.

Return Value

함수는 스트림 위치 중 하나 또는 두 위치를 모두 정상적으로 변경하면 결과 스트림 위치를 반환합니다. 아닌 경우 함수는 실패하며 잘못된 스트림 위치를 반환합니다.

설명

보호된 가상 멤버 함수는 제어된 스트림의 현재 위치를 변경하려고 합니다. strstreambuf 클래스 개체의 경우 스트림 위치는 스트림 오프셋으로만 구성됩니다. 오프셋 0은 제어되는 시퀀스의 첫 번째 요소를 지정합니다.

새 위치는 다음과 같이 결정됩니다.

  • 이 경우 _Way == ios_base::beg새 위치는 스트림의 시작 부분과 _Off.

  • 이 경우 _Way == ios_base::cur새 위치는 현재 스트림 위치와 _Off 더한 위치입니다.

  • 이 경우 _Way == ios_base::end새 위치는 스트림의 끝과 _Off.

0이 아니고 입력 버퍼가 있는 경우 _Which & ios_base::in 함수는 입력 버퍼에서 읽을 다음 위치를 변경합니다. 또한 0_Way != ios_base::cur이 아니고 출력 버퍼가 있는 경우 _Which & ios_base::out 함수는 읽을 다음 위치와 일치하도록 쓸 다음 위치도 설정합니다.

그렇지 않고 _Which & ios_base::out이 0이 아니며 출력 버퍼가 있으면 함수는 출력 버퍼에서 쓸 다음 위치를 변경합니다. 그렇지 않은 경우 위치 지정 작업이 실패합니다. 위치 지정 작업을 정상적으로 수행하려면 결과 스트림 위치가 제어되는 시퀀스 내에 있어야 합니다.

strstreambuf::seekpos

제어되는 스트림의 현재 위치를 변경하려고 하는 보호된 가상 멤버 함수입니다.

virtual streampos seekpos(streampos _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);

매개 변수

_Sp
찾을 위치입니다.

_Which
포인터 위치에 대한 모드를 지정합니다. 기본적으로는 읽기 및 쓰기 위치를 수정할 수 있습니다.

Return Value

함수는 스트림 위치 중 하나 또는 두 위치를 모두 정상적으로 변경하면 결과 스트림 위치를 반환합니다. 아닌 경우 함수는 실패하며 잘못된 스트림 위치를 반환합니다. 스트림 위치가 잘못되었는지를 확인하려면 반환 값을 pos_type(off_type(-1))과 비교합니다.

설명

보호된 가상 멤버 함수는 제어된 스트림의 현재 위치를 변경하려고 합니다. strstreambuf 클래스 개체의 경우 스트림 위치는 스트림 오프셋으로만 구성됩니다. 오프셋 0은 제어되는 시퀀스의 첫 번째 요소를 지정합니다. 새 위치는 _Sp 의해 결정됩니다.

&ios_base::in이 0이 아니고 입력 버퍼가 있는 경우 _Which 함수는 입력 버퍼에서 읽을 다음 위치를 변경합니다. ios_base::out 0이 아니고 출력 버퍼가 있는 경우 _Which 함수는 읽을 다음 위치와 일치하도록 쓸 다음 위치도 설정합니다. 그렇지 않으면 0이 아니고 출력 버퍼가 있는 경우 _Whichios_base::out 함수는 출력 버퍼에 쓸 다음 위치를 변경합니다. 그렇지 않은 경우 위치 지정 작업이 실패합니다. 위치 지정 작업을 정상적으로 수행하려면 결과 스트림 위치가 제어되는 시퀀스 내에 있어야 합니다.

strstreambuf::str

freeze를 호출한 다음 제어되는 시퀀스의 시작 부분에 대한 포인터를 반환합니다.

char *str();

Return Value

제어되는 시퀀스의 시작 부분에 대한 포인터입니다.

설명

종료 null 요소는 명시적으로 삽입한 경우가 아니면 없습니다.

예시

str을 사용하는 샘플은 strstreambuf::freeze를 참조하세요.

strstreambuf::strstreambuf

strstreambuf 형식의 개체를 생성합니다.

explicit strstreambuf(streamsize count = 0);

strstreambuf(void (* alloc_func)(size_t),
    void (* free_func)(void*));

strstreambuf(char* getptr,
    streamsize count,
    char* putptr = 0);

strstreambuf(signed char* getptr,
    streamsize count,
    signed char* putptr = 0);

strstreambuf(unsigned char* getptr,
    streamsize count,
    unsigned char* putptr = 0);

strstreambuf(const char* getptr,
    streamsize count);

strstreambuf(const signed char* getptr,
    streamsize count);

strstreambuf(const unsigned char* getptr,
    streamsize count);

매개 변수

alloc_func
버퍼 메모리를 할당하는 데 사용되는 함수입니다.

count
getptr에서 가리키는 버퍼의 길이를 결정합니다. getptr이 인수(첫 번째 생성자 양식)가 아닌 경우 버퍼에 대해 제안된 할당 크기입니다.

_Freefunc
버퍼 메모리를 확보하는 데 사용되는 함수입니다.

getptr
입력에 사용되는 버퍼입니다.

putptr
출력에 사용되는 버퍼입니다.

설명

첫 번째 생성자는 입력 버퍼, 출력 버퍼 및 strstreambuf 할당을 제어하는 모든 포인터에 null 포인터를 저장합니다. 이 생성자는 제어되는 시퀀스를 수정/확장할 수 있도록 저장된 strstreambuf 모드를 설정합니다. 또한 제안된 초기 할당 크기로 개수를 허용합니다.

두 번째 생성자는 스토리지를 할당하기 위해 호출할 함수에 대한 포인터로 alloc_func 저장하고 해당 스토리지를 해제하기 위해 호출할 함수에 대한 포인터로 free_func 것을 제외하고 첫 번째 생성자처럼 동작합니다.

아래에 3개 생성자의 코드가 나와 있습니다.

strstreambuf(char *getptr,
    streamsize count,
    char *putptr = 0);

strstreambuf(signed char *getptr,
    streamsize count,
    signed char *putptr = 0);

strstreambuf(unsigned char *getptr,
    streamsize count,
    unsigned char *putptr = 0);

또한 getptr가 제어되는 시퀀스를 보유하는 데 사용되는 배열 개체를 지정한다는 점을 제외하고 첫 번째처럼 동작합니다. (따라서 null 포인터가 아니어야 합니다.) 배열의 요소 N 수는 다음과 같이 결정됩니다.

  • (count> 0)이면 N은 개수입니다.

  • (count == 0)이면 N은 .입니다 strlen((const char *) getptr ) .

  • (count< 0) 이면 NINT_MAX.

putptr이 null 포인터인 경우 함수는 다음을 실행하여 입력 버퍼만 설정합니다.

setg(getptr,
    getptr,
    getptr + N);

그렇지 않으면 다음 코드를 실행하여 입력 버퍼와 출력 버퍼를 모두 설정합니다.

setg(getptr,
    getptr,
    putptr);

setp(putptr,
    getptr + N);

이 경우 putptr는 [getptr, getptr + N] 간격이어야 합니다.

마지막으로, 아래 코드에 나와 있는 세 가지 생성자는

strstreambuf(const char *getptr,
    streamsize count);

strstreambuf(const signed char *getptr,
    streamsize count);

strstreambuf(const unsigned char *getptr,
    streamsize count);

모두 다음 코드와 동일하게 동작합니다.

streambuf((char *)getptr, count);

단, 저장된 모드로 인해 제어되는 시퀀스를 수정하거나 확장할 수는 없습니다.

strstreambuf::underflow

입력 스트림에서 현재 요소를 추출하는 보호된 가상 함수입니다.

virtual int underflow();

Return Value

함수는 정상적으로 실행되지 않으면 EOF를 반환합니다. 그렇지 않으면 위에서 설명한 대로 변환된 입력 스트림의 현재 요소를 반환합니다.

설명

보호된 가상 멤버 함수는 입력 버퍼에서 현재 요소를 ch 추출한 다음 현재 스트림 위치를 이동하고 요소를 다음과 같이 (int)(unsigned char)ch반환하려고 합니다. 읽기 위치를 사용할 수 있는 경우 읽기 위치에 저장된 요소로 사용하고 ch 입력 버퍼에 대한 다음 포인터를 진행하는 한 가지 방법으로만 수행할 수 있습니다.

참고 항목

streambuf
C++ 표준 라이브러리의 스레드 보안
iostream 프로그래밍
iostreams 규칙