Namespaces
Variants

setbuf

From cppreference.net
< c ‎ | io
헤더 파일에 정의됨 <stdio.h>
void setbuf ( FILE * stream, char * buffer ) ;
(C99 이전)
void setbuf ( FILE * restrict stream, char * restrict buffer ) ;
(C99부터)
#define BUFSIZ     /*unspecified*/

스트림 작업에 사용할 내부 버퍼를 설정합니다. 최소한 BUFSIZ 문자 길이 이상이어야 합니다.

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

만약 buffer 가 null이면, 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);
} // buf의 수명이 종료되며, 정의되지 않은 동작

예제

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

참고문헌

  • 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 함수

참고 항목

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