setvbuf
控制流缓冲区和缓冲区大小。
int setvbuf(
FILE *stream,
char *buffer,
int mode,
size_t size
);
参数
stream
为 FILE 结构的指针。buffer
用户分配的缓冲区。mode
缓冲模式。size
缓冲区大小 (以字节为单位)。 允许的范围:2 个 AMP_LT= size AMP_LT= INT_MAX (2147483647)。 在内部,为 size 提供的值被舍入滚动到最近的多线程的 2。
返回值
返回 0; 如果成功。
如果 stream 是 NULL,或者,如果 mode 或 size 不在活动更改中,无效参数调用处理程序,如 参数验证所述。 如果执行允许继续,此函数返回 -1 并将 errno 到 EINVAL。
有关这些属性和其他错误代码的信息,请参见 _doserrno、 errno、 _sys_errlist 和 _sys_nerr。
备注
setvbuf 功能允许程序控件缓冲区和缓冲区大小 stream的。 stream 必须引用未执行 I/O 操作中打开的文件,且在打开为。 数组指向由 buffer 用作缓冲区,,除非它是 NULL,,在 setvbuf 使用长度 size/2 * 2 个字节情况下自动分配的缓冲区。
该模式必须是 _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。有关更多信息,请参见 平台调用示例。