setvbuf

스트림 버퍼링 및 버퍼 크기를 제어합니다.

구문

int setvbuf(
   FILE *stream,
   char *buffer,
   int mode,
   size_t size
);

매개 변수

stream
FILE 구조체에 대한 포인터입니다.

buffer
사용자가 할당한 버퍼입니다.

mode
버퍼링 모드입니다.

size
버퍼 크기(바이트)입니다. 허용 범위: 2 <= size<INT_MAX(2147483647). 내부적으로 size에 대해 제공되는 값은 가장 가까운 2의 배수로 내려집니다.

반환 값

정상적으로 실행되는 경우 0을 반환합니다.

streamNULL유효한 변경 내용이거나 size 잘못된 경우 mode 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 계속해서 실행하도록 허용된 경우 이 함수는 -1을 반환하고 errnoEINVAL로 설정합니다.

이러한 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 , _doserrno, _sys_errlist_sys_nerr.를 참조하세요errno.

설명

setvbuf 함수를 사용하면 프로그램이 stream에 대한 버퍼링 및 버퍼 크기를 모두 제어할 수 있습니다. stream 는 I/O 작업이 열린 이후로 수행되지 않은 열려 있는 파일을 참조해야 합니다. 이 buffer 경우 setvbuf 길이 size/2 * 2 바이트의 자동으로 할당 된 버퍼를 사용하는 경우가 아니면 NULLbuffer 가리키는 배열이 버퍼로 사용됩니다.

모드는 _IOFBF, _IOLBF 또는 _IONBF여야 합니다. mode_IOFBF 또는 _IOLBF이면 size가 버퍼의 크기로 사용됩니다. 이 _IONBF경우 mode 스트림은 버퍼되지 않으며 둘 다 sizebuffer 무시됩니다. mode의 값과 해당 의미는 다음과 같습니다.

mode 의미
_IOFBF 전체 버퍼링입니다. 즉, buffer를 버퍼로 사용하고 size를 버퍼의 크기로 사용합니다. 이 모드 bufferNULL바이트 길이인 자동으로 할당된 버퍼를 size 사용합니다.
_IOLBF 일부 시스템의 경우 이 모드는 줄 버퍼링을 제공합니다. 그러나 Win32의 동작은 _IOFBF - 전체 버퍼링과 동일합니다.
_IONBF buffer 또는 size에 관계없이 버퍼가 사용되지 않습니다.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT의 전역 상태를 참조하세요.

요구 사항

루틴에서 반환된 값 필수 헤더
setvbuf <stdio.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

라이브러리

모든 버전의 C 런타임 라이브러리입니다.

예시

// crt_setvbuf.c
// This program opens two streams: stream1
// and stream2. It then uses setvbuf to give stream1 a
// user-defined buffer of 1024 bytes and stream2 no buffer.
//

#include <stdio.h>

int main( void )
{
   char buf[1024];
   FILE *stream1, *stream2;

   if( fopen_s( &stream1, "data1", "a" ) == 0 &&
       fopen_s( &stream2, "data2", "w" ) == 0 )
   {
      if( setvbuf( stream1, buf, _IOFBF, sizeof( buf ) ) != 0 )
         printf( "Incorrect type or size of buffer for stream1\n" );
      else
         printf( "'stream1' now has a buffer of 1024 bytes\n" );
      if( setvbuf( stream2, NULL, _IONBF, 0 ) != 0 )
         printf( "Incorrect type or size of buffer for stream2\n" );
      else
         printf( "'stream2' now has no buffer\n" );
      _fcloseall();
   }
}
'stream1' now has a buffer of 1024 bytes
'stream2' now has no buffer

참고 항목

스트림 I/O
fclose, _fcloseall
fflush
fopen, _wfopen
setbuf