setbuf()函数
C语言中,setbuf()是标准库stdio.h中的函数,主要作用是用于设置C语言读写过程中流stream的缓冲模式,比如是全缓冲模式、行缓冲模式及无缓冲的模式。而什么是缓冲模式呢?
C语言的读写操作,在有缓冲的模式下,会先将数据批量读取到缓冲区中,然后根据特定的缓冲模式再进行相关的读写操作。
其中全缓冲模式,且没有调用ffrush()的情况下,一般会在缓冲区满了之后,才会继续进行相关的读写操作(比如写入磁盘或输出到屏幕),如果是调用了ffrush()函数,则会立马继续进行相关读写操作。
在行缓冲模式下,则会在遇到换行符的时候进行相关的读写操作,这一般是一种逐行读写的模式。
无缓冲,则数据不会被写入到缓冲区,而是直接与磁盘或终端之间进行读写的操作。
一般情况下,setbuf()设置的缓冲模式会根据参数的不同而设置成全缓冲或无缓冲的模式。
setbuf()函数语法:
void setbuf(FILE *fp, char *buf);
setbuf()参数
参数 描述
fp FILE类型指针,一般表示文件流
buf char类型指针(数组),指向缓冲区的指针
setbuf()函数控制的缓冲模式
模式 描述
全缓冲 buf指针指向的缓冲区空间大小如果指定大小的话,最小值应该为BUFSIZ,这是C语言中预定的宏,用来表示字符数组的长度。
无缓冲 buf指针为NULL(这也是一个预定义的宏),则无缓冲模式
setbuf()函数使用方法
因为setbuf()函数是用于设定读写缓冲的模式,所以,其应该在C语言读写操作文件打开且未进行读写操作的时候调用。
setbuf()返回值
无,为void。
setbuf()实例代码
(不好意思,这段话作废,与下面代码无关)如下实例代码,使用fopen()函数创建一个用于读取文件的文件流,并使用fgetc()函数读取一个字符,然后使用ftell()函数获取当前的指针位置,之后使用rewind()函数重置文件指针位置为起始位置,之后再使用ftell()函数获取当前的指针位置,然后将这两个位置进行比较:
#include "stdio.h"
int main() {
FILE *fp = fopen("D:\\text.txt", "w");
if(fp == NULL){
printf("文件打开失败\n");
}else{
// 在打开文件后,在写入之前,设置缓冲区模式
char buf[BUFSIZ]; //使用设置字符数组(缓冲区)大小为BUFSIZ个字节
setbuf(fp, buf);
char str[] = "微信公众号:全栈开发助手";
// 写入内容
fputs(str, fp);
fflush(fp);
fclose(fp);
fp = NULL;
}
return 0;
}
如上代码,编译运行后,可以在fopen()函数中指定的文件路径,找到该文件,然后打开,可以看到文件中的内容为:微信公众号:全栈开发助手。
免责声明:内容仅供参考,不保证正确性。 |