std::basic_filebuf<CharT,Traits>:: setbuf
|
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 멤버 함수)
|
|
|
파일 스트림에 대한 버퍼와 그 크기를 설정합니다
(함수) |