setbuf
cppreference.net에서
| 헤더에 정의됨 <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
| |