setvbuf
函数名: setvbuf
功 能: 把缓冲区与流相关
用 法: int setvbuf(FILE *stream, char *buf, int type, unsigned size);
参数:stream :指向流的指针 ;
buf : 期望缓冲区的地址;
type : 期望缓冲区的类型:
_IOFBF(满缓冲):当缓冲区为空时,从流读入数据。或者当缓冲区满时,向流写入数 据。
_IOLBF(行缓冲):每次从流中读入一行数据或向流中写入一行数据。
_IONBF(无缓冲):直接从流中读入数据或直接向流中写入数据,而没有缓冲区。
size : 缓冲区内字节的数量。
注意:This function should be called once the file associated with the stream has already been opened but before any input or output operation has taken place.
意思是这个函数应该在打开流后,立即调用,在任何对该流做输入输出前
setbuf
setbuf是linux中的C函数,主要用于打开和关闭缓冲机制。
函数名: setbuf
功 能: 把缓冲区与流相联
用 法: void setbuf(FILE *steam, char *buf);
说明:setbuf函数具有打开和关闭缓冲机制。为了带缓冲进行I/O,参数buf必须指向一个长度为BUFSIZ(定义在stdio.h头文件中)的缓冲区。通常在此之后该流就是全缓冲的,但是如果该流与一个终端设备相关,那么某些系统也可以将其设置为行缓冲。为了关闭缓冲,可以将buf参数设置为NULL。
#include <stdio.h>
char outbuf[50];
#if 0
int main(void)
{
/* 将outbuf与stdout输出流相连接 */
setbuf(stdout,outbuf);
/* 向stdout中放入一些字符串 */
puts("This is a test of buffered output.");
puts("This output will go into outbuf");
puts("and won't appear until the buffer");
puts("fills up or we flush the stream.\n");
/* 以下是outbuf中的内容 */
// puts(outbuf);
/*刷新流*/
// fflush(stdout);
return 0;
}
#endif
#include<stdio.h>
#include<stdlib.h>
//char buf[6];
int main()
{
// static char buf[6];
setbuf(stdout,malloc(100));
int c;
int i = 0;
while((c=getchar())!=EOF && getchar())
{
putchar(c);
#if 1
printf("hello\n");
i++;
if(i>5)
{
return 0;
}
#endif
}
return 0;
}
运行结果自己测试理解吧~
#include <stdio.h>
char outbuf[50];
#if 0
int main(void)
{
/* 将outbuf与stdout输出流相连接 */
setbuf(stdout,outbuf);
/* 向stdout中放入一些字符串 */
puts("This is a test of buffered output.");
puts("This output will go into outbuf");
puts("and won't appear until the buffer");
puts("fills up or we flush the stream.\n");
/* 以下是outbuf中的内容 */
// puts(outbuf);
/*刷新流*/
// fflush(stdout);
return 0;
}
#endif
#include<stdio.h>
#include<stdlib.h>
//char buf[6];
int main()
{
// static char buf[6];
setbuf(stdout,malloc(100));
int c;
int i = 0;
while((c=getchar())!=EOF && getchar())
{
putchar(c);
#if 1
printf("hello\n");
i++;
if(i>5)
{
return 0;
}
#endif
}
return 0;
}
#include <stdio.h>
int main(void)
{
FILE *input, *output;
char bufr[512];
input = fopen("file.in", "r+b");
output = fopen("file.out", "w");
/* set up input stream for minimal disk access,
* using our own character buffer */
if (setvbuf(input, bufr, _IOFBF, 512) != 0)
printf("failed to set up buffer for input file\n");
else
printf("buffer set up for input file\n");
/* set up output stream for line buffering using space that
* will be obtained through an indirect call to malloc */
if (setvbuf(output, NULL, _IOLBF, 132) != 0)
printf("failed to set up buffer for output file\n");
else
printf("buffer set up for output file\n");
/* perform file I/O here */
/* close files */
fclose(input);
fclose(output);
return 0;
}