setbuf 和setvbuf 简单介绍

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


 

你可能感兴趣的:(setbuf,缓冲区与流相关,setvbuf)