setvbuf()创建缓冲区函数
2016-05-24 17:24
435 查看
原型: setvbuf(FILE * restrict fp,char *restrict buf,int mode,size_t size);
函数建立了一个供 标准 I/O函数使用的替换缓冲区,打开文件后,在没有进行任何操作前,可以调用这个函数.由指针fp来指定流,buf指向将使用的存储区.如果buf的值不是NULL就必须创建这个缓冲区。size为数组的大小,mode将选取:_IOFBF(完全缓冲)等… 参考资料 如果执行成功,函数会返回零值,否则返回一个非零值.
用户打开一个文件后,可以建立自己的文件缓冲区,而不必使用fopen()函数打开文件时设定的默认缓冲区。这样就可以让用户自己来控制缓冲区,包括改变缓冲区大小、定时刷新缓冲区、改变缓冲区类型、删除流中默认的缓冲区、为不带缓冲区的流开辟缓冲区等。
示例代码:
if(setvbuf(fp,NULL,_IOFBF,BUFSIZE)!=0) puts("Error!");
函数建立了一个供 标准 I/O函数使用的替换缓冲区,打开文件后,在没有进行任何操作前,可以调用这个函数.由指针fp来指定流,buf指向将使用的存储区.如果buf的值不是NULL就必须创建这个缓冲区。size为数组的大小,mode将选取:_IOFBF(完全缓冲)等… 参考资料 如果执行成功,函数会返回零值,否则返回一个非零值.
用户打开一个文件后,可以建立自己的文件缓冲区,而不必使用fopen()函数打开文件时设定的默认缓冲区。这样就可以让用户自己来控制缓冲区,包括改变缓冲区大小、定时刷新缓冲区、改变缓冲区类型、删除流中默认的缓冲区、为不带缓冲区的流开辟缓冲区等。
示例代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #define BUFSIZE 1024 #define SIZE 81 void append(FILE *source,FILE *dest); int main(void) { FILE *fa,*fs; int file=0; char file_src[SIZE]; char file_app[SIZE]; puts("Enter name of destination file:"); gets(file_app); if((fa=fopen(file_app,"a"))==NULL) { fprintf(stderr,"Can't open %s\n",file_app); exit(2); } if(setvbuf(fa,NULL,_IOFBF,BUFSIZE)!=0) { fputs("Can't create output buffer\n",stderr); exit(3); } puts("Enter name of first source file:"); while(gets(file_src)!=NULL && file_src[0]!='\0') { if(strcmp(file_src,file_app)==0) fputs("Can't append file to itself\n",stderr); else if((fs=fopen(file_src,"r"))==NULL) fprintf(stderr,"Can't open%s\n",file_src); else { if(setvbuf(fs,NULL,_IOFBF,BUFSIZE)!=0){ fputs("Can't create output buffer\n",stderr); continue; } append(fs,fa); if(ferror(fa)!=0) fprintf(stderr,"Error in reding file %s\n",file_src); if(ferror(fs)!=0) fprintf(stderr,"Error in writing file %s\n",file_app); if(fclose(fs)!=0) puts("Error!"); file++; puts("Please next file:"); } } printf("Done,file is %d\n",file); if(fclose(fa)!=0) puts("Fa file close error!"); return 0; } void append(FILE *source,FILE *dest) { size_t bytes; static char temp[BUFSIZE]; while((bytes=fread(temp,sizeof(char),BUFSIZE,source))>0) fwrite(temp,sizeof(char),bytes,dest); }
相关文章推荐
- IIS7.5 Microsoft VBScript runtime error '800a0046'的解决
- win10 完美屏蔽Flash右键菜单,内存播放Flash swf 文件(VC、 VB)f_in_box4.4 最新破解版
- VBA 每日文件按日期打包存放
- VBA进度条
- fopen的默认缓冲大小和setvbuf 用法
- AM335x OTG VBUS电路设计的一些注意要点
- Vb.net-DatagridView之右击删除选中行
- VBS ConvertToXlsx
- VBScipt脚本输出
- 【VB.net】DataGridView控件的使用
- VB.net学习笔记(二十二)XML的DOM模型读写
- VB文本框限制输入类型
- VB.net学习笔记(二十一)XML流的读写
- 录制vb之文件转换
- VS2010环境下使用VB编写串口助手
- VB script 入门
- VB Val和CDbl的区别
- VB编程的必备技巧
- VB split的用法
- vb中split函数的用法