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을 반환합니다.
stream
NULL
유효한 변경 내용이거나 size
잘못된 경우 mode
매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 계속해서 실행하도록 허용된 경우 이 함수는 -1을 반환하고 errno
를 EINVAL
로 설정합니다.
이러한 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 errno
, _doserrno
, _sys_errlist
및 _sys_nerr
을(를) 참조하세요.
설명
setvbuf
함수를 사용하면 프로그램이 stream
에 대한 버퍼링 및 버퍼 크기를 모두 제어할 수 있습니다. stream
는 I/O 작업이 열린 이후로 수행되지 않은 열려 있는 파일을 참조해야 합니다. 이 buffer
경우 setvbuf
길이 size
/2 * 2 바이트의 자동으로 할당 된 버퍼를 사용하는 경우가 아니면 NULL
buffer
가리키는 배열이 버퍼로 사용됩니다.
모드는 _IOFBF
, _IOLBF
또는 _IONBF
여야 합니다. mode
가 _IOFBF
또는 _IOLBF
이면 size
가 버퍼의 크기로 사용됩니다. 이 _IONBF
경우 mode
스트림은 버퍼되지 않으며 둘 다 size
buffer
무시됩니다. mode
의 값과 해당 의미는 다음과 같습니다.
mode 값 |
의미 |
---|---|
_IOFBF |
전체 버퍼링입니다. 즉, buffer 를 버퍼로 사용하고 size 를 버퍼의 크기로 사용합니다. 이 모드 buffer 는 NULL 바이트 길이인 자동으로 할당된 버퍼를 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