setvbufsetvbuf

스트림 버퍼링 및 버퍼 크기를 제어합니다.Controls stream buffering and buffer size.

구문Syntax

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

매개 변수Parameters

스트림stream
FILE 구조체에 대한 포인터입니다.Pointer to FILE structure.

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

modemode
버퍼링 모드입니다.Mode of buffering.

sizesize
버퍼 크기(바이트)입니다.Buffer size in bytes. 허용 범위: 2 <= size <= INT_MAX (2147483647).Allowable range: 2 <= size <= INT_MAX (2147483647). 내부적으로 크기 에 대해 제공 되는 값은 가장 가까운 2의 배수로 반올림 됩니다.Internally, the value supplied for size is rounded down to the nearest multiple of 2.

Return ValueReturn Value

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

StreamNULL이거나 모드나 크기가 유효한 변경 범위에 포함 되지 않은 경우 매개 변수 유효성 검사에 설명 된 대로 잘못 된 매개 변수 처리기가 호출 됩니다.If stream is NULL, or if mode or size is not within a valid change, the invalid parameter handler is invoked, as described in Parameter Validation. 계속해서 실행하도록 허용된 경우 이 함수는 -1을 반환하고 errnoEINVAL로 설정합니다.If execution is allowed to continue, this function returns -1 and sets errno to EINVAL.

이러한 오류 코드 및 기타 오류 코드에 대한 내용은 _doserrno, errno, _sys_errlist, and _sys_nerr을 참조하세요.For information on these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

설명Remarks

Setvbuf 함수를 사용 하면 프로그램에서 스트림의버퍼링 및 버퍼 크기를 모두 제어할 수 있습니다.The setvbuf function allows the program to control both buffering and buffer size for stream. 스트림이 열려 있었기 때문에 i/o 작업이 수행 되지 않은 열려 있는 파일을 참조 해야 합니다.stream must refer to an open file that has not undergone an I/O operation since it was opened. 버퍼 에서 가리키는 배열이 NULL이 아닌 경우 버퍼로 사용 됩니다 .이 경우 setvbuf 는 자동으로 할당 된 바이트 크기/2 * 바이트의 버퍼를 사용 합니다.The array pointed to by buffer is used as the buffer, unless it is NULL, in which case setvbuf uses an automatically allocated buffer of length size/2 * 2 bytes.

모드는 _IOFBF, _IOLBF또는 _IONBF이어야 합니다.The mode must be _IOFBF, _IOLBF, or _IONBF. Mode_IOFBF 또는 _IOLBF이면 크기가 버퍼의 크기로 사용 됩니다.If mode is _IOFBF or _IOLBF, then size is used as the size of the buffer. Mode_IONBF이면 스트림은 버퍼링 되지 않으며 크기 는 무시 되 고 버퍼 는 무시 됩니다.If mode is _IONBF, the stream is unbuffered and size and buffer are ignored. 모드 의 값과 해당 의미는 다음과 같습니다.Values for mode and their meanings are:

모드mode value 의미Meaning
_IOFBF_IOFBF 전체 버퍼링 즉, 버퍼는 버퍼로 사용 되 고 크기 는 버퍼 크기로 사용 됩니다.Full buffering; that is, buffer is used as the buffer and size is used as the size of the buffer. 버퍼가 NULL이면 자동으로 할당 된 버퍼 크기 (바이트)가 사용 됩니다.If buffer is NULL, an automatically allocated buffer size bytes long is used.
_IOLBF_IOLBF 이 값을 사용하는 경우 라인 버퍼링이 제공되는 시스템도 있습니다.For some systems, this provides line buffering. 그러나 Win32의 경우 동작은 _IOFBF 전체 버퍼링과 동일 합니다.However, for Win32, the behavior is the same as _IOFBF - Full Buffering.
_IONBF_IONBF 버퍼 또는 크기에 관계 없이 버퍼가 사용 되지 않습니다.No buffer is used, regardless of buffer or size.

기본적으로이 함수의 전역 상태는 응용 프로그램으로 범위가 지정 됩니다.By default, this function's global state is scoped to the application. 이를 변경 하려면 CRT의 전역 상태를 참조 하세요.To change this, see Global state in the CRT.

요구 사항Requirements

루틴에서 반환된 값Routine 필수 헤더Required header
setvbufsetvbuf <stdio.h><stdio.h>

호환성에 대한 자세한 내용은 Compatibility을 참조하세요.For additional compatibility information, see Compatibility.

라이브러리Libraries

모든 버전의 C 런타임 라이브러리입니다.All versions of the C run-time libraries.

예제Example

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

참조See also

스트림 I/OStream I/O
fclose, _fcloseallfclose, _fcloseall
fflushfflush
fopen, _wfopenfopen, _wfopen
setbufsetbuf