天天看点

其它IO函数

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

继续阅读