1.setvbuf
int setvbuf(FILE *restrict fp,char * restrict buf,int mode,size_t size);
fp:相关联的文件
buf:分配的缓冲区,NULL表示系统自动分配,否则自己建立缓冲区,并传递该缓冲区地址
mode:缓冲模式
size:缓冲区大小
成功返回0,不成功返回非0
2.fwrite(文件被写入)
size_t fwrite(void *restrict ptr,size_t size,size_t nmemb,FILE *restrict fp);
ptr:从哪里写入
size:写入的块大小
nmemb:写入的块数
fp:写入到哪个文件
成功返回写入块数,失败小于写入块数
3.fread(文件被读)
size_t fread(void *restrict ptr,size_t size,size_t nmemb,FILE *restrict
fp);
ptr:读取到哪儿
size:读取的块大小
nmemb:读取的块数
fp:从哪个文件读取
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #define SLEN 81
- #define BUFSIZE 1024
- void append(FILE *source,FILE *dest);
- int main(void){
- FILE *fa;//被追加的目的文件
- FILE *fs;//输入的源文件
- char file_app[SLEN];
- char file_src[SLEN];
- int files = 0;//记录共有多少个文件用来追加
- puts("Enter name of destination file:");
- gets(file_app);
- if((fa = fopen(file_app,"a")) == NULL){
- puts("can't open file_app.");
- exit(-1);
- }
- if(setvbuf(fa,NULL,_IOFBF,BUFSIZE) != 0){//分配缓存
- puts("can't create buff of file_app.");
- exit(-1);
- }
- puts("Enter name of first source file:");
- while(gets(file_src) && file_src[0] != '\0'){
- if(strcmp(file_src,file_app) == 0){
- puts("Can't append file to itself.");
- }
- else if((fs = fopen(file_src,"r")) == NULL){
- puts("can't open input file");
- }
- else{
- if(setvbuf(fs,NULL,_IOFBF,BUFSIZE) != 0){
- puts("can't create input buff.");
- continue;
- }
- append(fs,fa);
- if(ferror(fs) != 0){//ferror用来查看是否读写错误
- puts("Error of fs");
- }
- if(ferror(fa) != 0){
- puts("Error of fa");
- }
- fclose(fs);
- files++;
- printf("File %s appended.\n",file_src);
- puts("Next file:");
- }
- }
- printf("Done.%d files appended.\n",files);
- fclose(fa);
- 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);//从缓存区读到文件
- }
- }