1.setvbuf
用于以对文件的 stdio 缓冲区进行设置,譬如缓冲区的缓冲模式、缓冲区的大小、起
始地址等。
1)头文件
#include <stdio.h>
2)函数原型
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
3)参数
stream:表示指定的文件。
buf:如果不为NULL,那么buf指向size大小的内存区域将作为该文件的stdio缓冲区,应以动态或静态的方式在堆中为该缓冲区分配一块空间,而不是分配在栈上的函数内的自动变量(局部变量)。如果buf等于NULL,那么会自动分配一块空间作为该文件的stdio缓冲区(除非参数mode配置为非缓冲模式)。
mode:用于指定缓冲区的缓冲类型,可取值如下:
⚫ _IONBF:不对I/O进行缓冲(无缓冲)。每个标准I/O 函数将立即调用对应的系统I/O函数,并且忽略buf和size参数,可以分别指定两个参数为NULL和0。标准错误stderr默认属于这一种类型,从而保证错误信息能够立即输出。
⚫ _IOLBF:采用行缓冲I/O。当在输出或输入中遇到换行符"n"时,标准I/O才会执行对应的系统I/O操作。对于输出流,在输出一个换行符前将数据缓存(除非缓冲区已经被填满),当输出换行符时,再将这一行数据通过系统I/O(write函数)刷入到内核缓冲区中;对于输入流,每次读取一行数据。对于终端设备默认采用行缓冲模式,比如标准输入和标准输出。
⚫ _IOFBF:采用全缓冲I/O。在填满stdio缓冲区后才进行系统I/O操作(read、write)。对于输出流,当fwrite写入文件的数据填满缓冲区时,才调用系统I/O(write)将stdio缓冲区中的数据刷入内核缓冲区;对于输入流,每次读取stdio缓冲区大小的字节数据。普通磁盘上的常规文件默认采用全缓冲模式。
size:指定缓冲区的大小。
4)返回值
成功返回0,失败将返回一个非0值,并且会设置errno来指示错误原因。
2.setbuf
用于以对文件的 stdio 缓冲区进行设置,相当于:
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
1)头文件
#include <stdio.h>
2)函数原型
void setbuf(FILE *stream, char *buf);
3)参数
stream:表示指定的文件。
buf:如果为NULL以表示无缓冲,如果不为NULL,则需为指向BUFSIZ个字节大小的缓冲区(BUFSIZ 定义于头文件<stdio.h>中,该值通常为 8192)。
4)返回值
无。
3.setbuffer
用于以对文件的 stdio 缓冲区进行设置,允许指定buf缓冲区的大小,相当于:
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, size);。
1)头文件
#include <stdio.h>
2)函数原型
void setbuffer(FILE *stream, char *buf, size_t size);
3)参数
stream:表示指定的文件。
buf:如果为NULL以表示无缓冲,如果不为NULL,则需为指向buf个字节大小的缓冲区。
size:表示缓冲区buf的大小。
4)返回值
无。
482