setvbuf() — 버퍼링 제어
형식
#include <stdio.h>
int setvbuf(FILE *stream, char *buf, int type, size_t size);
언어 레벨
ANSI
스레드세이프
예
설명
setvbuf() 함수는 지정된 스트림을 위한 버퍼링 전략과 버퍼 크기에 대한 제어를 허용합니다. 통합 파일 시스템 사용 시 setvbuf() 함수는 ILE C에서만 작동합니다. 스트림은 열리지만 읽거나 쓰기 대상이 아닌 파일을 참조해야 합니다.
buf에서 지정된 배열은 C 라이브러리가 스트림을 위한 버퍼로 사용하기로 선택할 수 있다고 제공한 영역을 지정합니다. NULL의 buf 값은 이러한 영역이 제공되지 않고 C 라이브러리가 해당 스트림에 대해 자신의 버퍼 관리를 담당하고 있다고 가정함을 표시합니다. 버퍼를 제공하면 스트림이 닫힐 때까지 존재해야 합니다.
type은 다음 중 하나여야 합니다.
- 값
- 의미
- _IONBF
- 사용된 버퍼가 없습니다.
- _IOFBF
- 전체 버퍼링은 입력과 출력을 위해 사용됩니다. buf를 버퍼로 사용하고 size를 버퍼 크기로 사용합니다.
- _IOLBF
- 행 버퍼링이 사용됩니다. 줄 바꾸기 문자가 쓰여지고 버퍼가 가득 차거나 입력이 요청되면 버퍼가 삭제됩니다.
type이 _IOFBF 또는 _IOLBF인 경우, size는 제공된 버퍼의 크기입니다. buf가 NULL이고, C 라이브러리가 size를 자신의 버퍼에 대한 제안 크기로 사용합니다. type이 _IONBF이면, buf와 size 모두 무시됩니다.
size의 값은 0보다 더 커야 합니다.
리턴값
성공하면 setvbuf() 함수는 0을 리턴합니다. 유효하지 않는 값이 매개변수 리스트에 지정되거나 요청을 수행할 수 없는 경우 0(영)이 아닌 값을 리턴합니다.
setvbuf() 함수는 stdout 또는 stdin 또는 stderr에는 영향을 미치지 않습니다.
경고: 지정된 stream이 닫힐 때 버퍼로서 사용되는 배열이 존재해야 합니다. 예를 들어 버퍼가 함수 블록의 범위 내에서 선언되면, 함수가 종료되고 버퍼에 할당된 기억장치를 해제하기 전에 stream이 닫혀야 합니다.
예
이 예는 stream1에 대한
buf의 버퍼를 설정하고 stream2에 대한 해당 입력이 버퍼되지 않음을 지정합니다.
#include <stdio.h>
#define BUF_SIZE 1024
char buf[BUF_SIZE];
FILE *stream1, *stream2;
int main(void)
{
stream1 = fopen("myfile1.dat", "r");
stream2 = fopen("myfile2.dat", "r");
/* stream1 uses a user-assigned buffer of BUF_SIZE bytes */
if (setvbuf(stream1, buf, _IOFBF, sizeof(buf)) != 0)
printf("Incorrect type or size of buffer\n");
/* stream2 is unbuffered */
if (setvbuf(stream2, NULL, _IONBF, 0) != 0)
printf("Incorrect type or size of buffer\n");
/* This is a program fragment and not a complete function example */
}