Namespaces
Variants

std::basic_filebuf<CharT,Traits>:: setbuf

From cppreference.net
protected :
virtual std:: basic_streambuf < CharT, Traits > * setbuf ( char_type * s, std:: streamsize n )

만약 s 가 null 포인터이고 n 이 0이면, filebuf는 출력에 대해 버퍼링되지 않은(unbuffered) 상태가 되어, pbase() pptr() 가 null이 되며 모든 출력이 즉시 파일로 전송됩니다.

그렇지 않으면, setbuf() 호출은 내부 버퍼(제어되는 문자 시퀀스)를 사용자가 제공한 문자 배열로 대체하며, 이 배열의 첫 번째 요소는 s 가 가리키고, 이 std::basic_filebuf 객체가 해당 배열에서 최대 n 바이트까지 버퍼링에 사용할 수 있도록 합니다.

이 함수는 protected virtual로, 오직 pubsetbuf() 를 통해서만 호출되거나 사용자 정의 클래스의 멤버 함수에서 std::basic_filebuf 를 상속받은 경우에만 호출될 수 있습니다.

목차

매개변수

s - 사용자가 제공한 버퍼의 첫 번째 CharT 에 대한 포인터 또는 null
n - 사용자가 제공한 버퍼 내 CharT 요소의 개수 또는 0

반환값

this

참고 사항

이 함수를 사용할 수 있는 조건과 제공된 버퍼가 사용되는 방식은 구현에 따라 정의됩니다.

  • GCC 4.6 libstdc++
setbuf() std::basic_filebuf 가 파일과 연결되지 않은 상태에서만 호출할 수 있습니다(그렇지 않으면 아무 효과가 없음). 사용자가 제공한 버퍼를 사용하면 파일 읽기 시 한 번에 n-1 바이트씩 읽습니다.
  • Clang++3.0 libc++
setbuf() 는 파일을 연 후, 그러나 어떤 입출력 작업도 수행하기 전에 호출될 수 있습니다(그렇지 않으면 충돌이 발생할 수 있음). 사용자가 제공한 버퍼를 사용할 경우, 파일에서 읽기 작업은 버퍼에 맞는 4096의 가장 큰 배수만큼 읽습니다.
  • Visual Studio 2010
setbuf() 는 언제든지 호출할 수 있으며, 일부 입출력이 발생한 후에도 가능합니다. 버퍼에 현재 내용이 있는 경우 해당 내용은 손실됩니다.

표준은 이 함수에 대해 어떤 동작도 정의하지 않으며, 단지 setbuf ( 0 , 0 ) 호출이 어떤 I/O가 발생하기 전에 수행될 경우 버퍼링되지 않은 출력을 설정해야 한다는 점만 요구합니다.

예제

읽기를 위한 10k 버퍼를 제공합니다. Linux에서는 strace 유틸리티를 사용하여 실제로 읽은 바이트 수를 관찰할 수 있습니다.

#include <fstream>
#include <iostream>
#include <string>
int main()
{
    int cnt = 0;
    std::ifstream file;
    char buf[10241];
    file.rdbuf()->pubsetbuf(buf, sizeof buf);
    file.open("/usr/share/dict/words");
    for (std::string line; getline(file, line);)
        ++cnt;
    std::cout << cnt << '\n';
}

가능한 출력:

356010

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 173 C++98 n 의 타입이 int 로 잘못 지정됨 std::streamsize 로 수정됨

참고 항목

setbuf ( ) 를 호출합니다
( std::basic_streambuf<CharT,Traits> 의 public 멤버 함수)
파일 스트림에 대한 버퍼와 그 크기를 설정합니다
(함수)