다음을 통해 공유


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이거나 mode 또는 size가 유효한 변경 이내에 있지 않은 경우, 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 계속 실행하는 것이 허용된 경우, 이 함수는 -1을 반환하고 errno을 EINVAL로 설정합니다.

이러한 오류 코드 및 기타 오류 코드에 대한 내용은 _doserrno, errno, _sys_errlist 및 _sys_nerr을 참조하십시오.

설명

setvbuf 함수는 프로그램이 버퍼링과 stream의 버퍼 크기를 제어하도록 허용합니다. stream는 반드시 열린 이래로 I/O 작업의 영향을 받지 않은 열린 파일을 참조해야 합니다. NULL이 아닌 경우, 즉 setvbuf가 size/2 * 2 바이트 길이의 자동으로 할당된 버퍼를 사용하는 경우 buffer에 의해 가리켜지는 배열은 버퍼로 사용됩니다.

모드는 _IOFBF, _IOLBF 또는 _IONBF이어야 합니다. mode가 _IOFBF 또는 _IOLBF이면, size이 버퍼의 크기로 사용됩니다. mode가 _IONBF이면, 스트림은 버퍼가 해제되고 size 및 buffer는 무시됩니다. mode의 값 및 그 의미는 다음과 같습니다.

  • _IOFBF
    완전 버퍼링입니다. 즉, buffer이 버퍼로 사용되고 size가 버퍼의 크기로 사용됩니다. buffer가 NULL이면, size 바이트의 길이의 자동으로 할당된 된 버퍼가 사용됩니다.

  • _IOLBF
    일부 시스템에서 이것은 선형 버퍼링을 제공합니다. 그러나, Win32에서 동작은 _IOFBF - 전체 버퍼링과 동일합니다.

  • _IONBF
    buffer 또는 size에 관계없이 버퍼가 사용되지 않습니다.

요구 사항

루틴

필수 헤더

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();
   }
}
  

해당 .NET Framework 항목

해당 사항 없음. 표준 C 함수를 호출하려면 PInvoke를 사용합니다. 자세한 내용은 플랫폼 호출 예제를 참조하십시오.

참고 항목

참조

스트림 I/O

fclose, _fcloseall

fflush

fopen, _wfopen

setbuf