setvbuf() — 버퍼링 제어

형식

#include <stdio.h>
int setvbuf(FILE *stream, char *buf, int type, size_t size);

언어 레벨

ANSI

스레드세이프

설명

setvbuf() 함수는 지정된 스트림을 위한 버퍼링 전략과 버퍼 크기에 대한 제어를 허용합니다. 통합 파일 시스템 사용 시 setvbuf() 함수는 ILE C에서만 작동합니다. 스트림은 열리지만 읽거나 쓰기 대상이 아닌 파일을 참조해야 합니다.

buf에서 지정된 배열은 C 라이브러리가 스트림을 위한 버퍼로 사용하기로 선택할 수 있다고 제공한 영역을 지정합니다. NULLbuf 값은 이러한 영역이 제공되지 않고 C 라이브러리가 해당 스트림에 대해 자신의 버퍼 관리를 담당하고 있다고 가정함을 표시합니다. 버퍼를 제공하면 스트림이 닫힐 때까지 존재해야 합니다.

type은 다음 중 하나여야 합니다.
의미
_IONBF
사용된 버퍼가 없습니다.
_IOFBF
전체 버퍼링은 입력과 출력을 위해 사용됩니다. buf를 버퍼로 사용하고 size를 버퍼 크기로 사용합니다.
_IOLBF
행 버퍼링이 사용됩니다. 줄 바꾸기 문자가 쓰여지고 버퍼가 가득 차거나 입력이 요청되면 버퍼가 삭제됩니다.

type_IOFBF 또는 _IOLBF인 경우, size는 제공된 버퍼의 크기입니다. bufNULL이고, C 라이브러리가 size를 자신의 버퍼에 대한 제안 크기로 사용합니다. type_IONBF이면, bufsize 모두 무시됩니다.

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  */
 
}