Namespaces
Variants

std:: setbuf

From cppreference.net
< cpp ‎ | io ‎ | c
헤더 파일에 정의됨 <cstdio>
void setbuf ( std:: FILE * stream, char * buffer ) ;

C 스트림 stream 에서 수행되는 I/O 작업에 사용할 내부 버퍼를 설정합니다.

만약 buffer 가 null이 아니라면, 다음 코드와 동등합니다: std:: setvbuf ( stream, buffer, _IOFBF , BUFSIZ ) .

만약 buffer 가 null이면, std:: setvbuf ( stream, nullptr, _IONBF , 0 ) 와 동등하며, 이는 버퍼링을 끕니다.

목차

매개변수

stream - 버퍼를 설정할 파일 스트림
buffer - 스트림이 사용할 버퍼에 대한 포인터. 널 포인터가 제공되면 버퍼링이 해제됩니다. 널이 아닌 경우 최소 BUFSIZ 문자를 보관할 수 있어야 함

반환값

(없음)

참고 사항

만약 BUFSIZ 가 적절한 버퍼 크기가 아니라면, std::setvbuf 를 사용하여 변경할 수 있습니다.

std::setvbuf 는 오류 감지를 위해서도 사용되어야 합니다. 왜냐하면 std::setbuf 는 성공 또는 실패를 나타내지 않기 때문입니다.

이 함수는 stream 이 열린 파일과 연결된 후에만 사용할 수 있지만, 다른 작업(실패한 std::setbuf / std::setvbuf 호출 외) 이전이어야 합니다.

흔히 발생하는 오류는 stdin 또는 stdout 의 버퍼를 프로그램 종료 전에 수명이 끝나는 배열로 설정하는 것입니다:

int main()
{
    char buf[BUFSIZ];
    std::setbuf(stdin, buf);
} // buf의 수명이 종료됨, 정의되지 않은 동작

예제

std::setbuf 는 즉각적인 출력이 필요한 스트림에서 버퍼링을 비활성화하는 데 사용될 수 있습니다.

#include <chrono>
#include <cstdio>
#include <thread>
int main()
{
    using namespace std::chrono_literals;
    std::setbuf(stdout, nullptr); // unbuffered stdout
    std::putchar('a'); // appears immediately on unbuffered stream
    std::this_thread::sleep_for(1s);
    std::putchar('b');
}

출력:

ab

참고 항목

파일 스트림에 대한 버퍼와 그 크기를 설정합니다
(함수)
C 문서 for setbuf