Namespaces
Variants

setbuf

cppreference.net에서
< c | io
 
 
파일 입출력
타입과 객체
        
함수
파일 접근
(C95)
비형식 입출력
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

형식 입력
 
헤더에 정의됨 <stdio.h>
void setbuf( FILE* stream, char* buffer );
(C99까지)
void setbuf( FILE* restrict stream, char* restrict buffer );
(C99부터)
#define BUFSIZ  /* unspecified */

스트림 연산에 사용할 내부 버퍼를 설정합니다. 최소한 BUFSIZ 문자 길이여야 합니다.

만약 buffer 이 널이 아니면, setvbuf(stream, buffer, _IOFBF, BUFSIZ) 과 동일합니다.

만약 buffer 이 널이면, setvbuf(stream, NULL, _IONBF, 0) 과 동일하며, 이는 버퍼링을 끕니다.

매개변수

stream - 버퍼를 설정할 파일 스트림
buffer - 스트림이 사용할 버퍼를 가리키는 포인터. 널 포인터가 제공되면 버퍼링이 꺼집니다.

참고

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

setvbuf 은 오류를 감지하는 데에도 사용해야 합니다. 왜냐하면 setbuf 은 성공이나 실패를 나타내지 않기 때문입니다.

이 함수는 stream 이 열린 파일과 연결된 후에만 사용할 수 있으며, 다른 연산(실패한 setbuf/setvbuf 호출 제외) 전에 사용해야 합니다.

일반적인 오류는 stdin 또는 stdout 의 버퍼를 프로그램이 종료되기 전에 수명이 끝나는 배열로 설정하는 것입니다:

int main(void)
{
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior

예제

setbuf 은 즉시 출력이 필요한 스트림에서 버퍼링을 비활성화하는 데 사용할 수 있습니다.

#include <stdio.h>
#include <threads.h>

int main(void)
{
    setbuf(stdout, NULL); // unbuffered stdout
    putchar('a'); // 'a' appears immediately if stdout is unbuffered
    thrd_sleep(&(struct timespec){ .tv_sec = 1 }, NULL); // sleep 1 sec
    putchar('b');
}

출력:

ab

참조

  • C23 표준 (ISO/IEC 9899:2024):
  • 7.21.5.5 setbuf 함수 (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 7.21.5.5 setbuf 함수 (p: 225)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.21.5.5 setbuf 함수 (p: 307-308)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.19.5.5 setbuf 함수 (p: 273)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 4.9.5.5 setbuf 함수

같이 보기

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