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:从哪个文件读取

成功返回写入块数,失败小于写入块数

 

  1. #include<stdio.h> 
  2. #include<stdlib.h> 
  3. #include<string.h> 
  4. #define SLEN 81 
  5. #define BUFSIZE 1024 
  6.  
  7.  
  8. void append(FILE *source,FILE *dest); 
  9.  
  10. int main(void){ 
  11.     FILE *fa;//被追加的目的文件  
  12.     FILE *fs;//输入的源文件  
  13.     char file_app[SLEN]; 
  14.     char file_src[SLEN]; 
  15.     int files = 0;//记录共有多少个文件用来追加  
  16.      
  17.     puts("Enter name of destination file:"); 
  18.     gets(file_app); 
  19.     if((fa = fopen(file_app,"a")) == NULL){ 
  20.         puts("can't open file_app."); 
  21.         exit(-1); 
  22.     } 
  23.     if(setvbuf(fa,NULL,_IOFBF,BUFSIZE) != 0){//分配缓存  
  24.         puts("can't create buff of file_app."); 
  25.         exit(-1); 
  26.     } 
  27.     puts("Enter name of first source file:"); 
  28.     while(gets(file_src) && file_src[0] != '\0'){ 
  29.         if(strcmp(file_src,file_app) == 0){ 
  30.             puts("Can't append file to itself."); 
  31.         } 
  32.         else if((fs = fopen(file_src,"r")) == NULL){ 
  33.             puts("can't open input file"); 
  34.         } 
  35.         else
  36.             if(setvbuf(fs,NULL,_IOFBF,BUFSIZE) != 0){ 
  37.                 puts("can't create input buff."); 
  38.                 continue
  39.             } 
  40.             append(fs,fa); 
  41.             if(ferror(fs) != 0){//ferror用来查看是否读写错误  
  42.                 puts("Error of fs"); 
  43.             } 
  44.             if(ferror(fa) != 0){ 
  45.                 puts("Error of fa"); 
  46.             } 
  47.             fclose(fs); 
  48.             files++; 
  49.             printf("File %s appended.\n",file_src); 
  50.             puts("Next file:"); 
  51.         } 
  52.     } 
  53.     printf("Done.%d files appended.\n",files); 
  54.     fclose(fa); 
  55.     return 0; 
  56. void append(FILE *source,FILE *dest){ 
  57.      size_t bytes; 
  58.      static char temp[BUFSIZE];//自设缓存区  
  59.       
  60.      while((bytes = fread(temp,sizeof(char),BUFSIZE,source))>0){//从文件读到缓存区  
  61.          fwrite(temp,sizeof(char),bytes,dest);//从缓存区读到文件  
  62.      }