IO进程线程;标准io;文件IO;0901
思维导图
标准IO,模块化读取 fread/fwrite实现文件拷贝
代码
#include<stdio.h>
#include<string.h>
int main(int argc,const char *argv[])
{char r[128]="";char w[128]="";strcpy(r,argv[1]);//主函数 外部传参strcpy(w,argv[2]);FILE *rfp=NULL;FILE *wfp=NULL;printf("r=%s\n",r);printf("w=%s\n",w);if((rfp=fopen(r,"r"))==NULL){perror("open file");//perror 可以输出 错误码 的 含义printf("打开源文件失败\n");return -1;}if((wfp=fopen(w,"w"))==NULL){perror("open file");//perror 可以输出 错误码 的 含义printf("打开目标文件失败\n");return -1;}//文件拷贝int res;char buff[]="";while(1){res=fread(buff,sizeof(buff),1,rfp);if(feof(rfp)){printf("读取到结尾\n");}if(ferror(rfp)){printf("读取错误\n");}//printf("res=%d\n",res);//fread的返回值 读取到了多少个//写入文件fwrite(buff,sizeof(buff),res,wfp);if (res<1){break;}}//关闭文件fclose(rfp);fclose(wfp);return 0;
}
运行情况
fread/fwrite拷贝文件中的数字 到 另一个文件
代码
#include<stdio.h>
#include<string.h>
int main(int argc,const char *argv[])
{char r[128]="";char w[128]="";strcpy(r,argv[1]);//主函数 外部传参strcpy(w,argv[2]);FILE *rfp=NULL;FILE *wfp=NULL;printf("r=%s\n",r);printf("w=%s\n",w);if((rfp=fopen(r,"r"))==NULL){perror("open file");//perror 可以输出 错误码 的 含义printf("打开源文件失败\n");return -1;}if((wfp=fopen(w,"w"))==NULL){perror("open file");//perror 可以输出 错误码 的 含义printf("打开目标文件失败\n");return -1;}//文件拷贝int res;char buff='\0';while(1){res=fread(&buff,sizeof(buff),1,rfp);if(feof(rfp)){printf("读取到结尾\n");}if(ferror(rfp)){printf("读取错误\n");}if(buff>='0'&&buff<='9')//判断 是数字{//写入文件fwrite(&buff,sizeof(buff),res,wfp);}if (res<1){break;}}//关闭文件fclose(rfp);fclose(wfp);return 0;
}
运行情况
文件IO实现文件的拷贝
代码
#include<myhead.h>
int main(int argc,const char *argv[])
{int rfd=-1;//源文件的 文件描述符int wfd=-1;//目标文件的 文件描述符char r[128]="";char w[128]="";strcpy(r,argv[1]);strcpy(w,argv[2]);if((rfd=open(r,O_RDONLY))==-1)//打开 源文件{perror("open file");return -1;}if((wfd=open(w,O_WRONLY|O_CREAT|O_TRUNC,0644))==-1)//创建 目标文件{perror("open file");return -1;}char buff;//读取 暂存的int res;while(1){res=read(rfd,&buff,1);//从rfd读取,写入到buffwrite(wfd,&buff,res);//写入 长度为 res个字符if(res<1)//判断 退出循环条件{break;}}close(rfd);close(wfd);return 0;
}
运行情况
文件IO和标准IO的区别
文件IO操作 文件描述符 ,无缓冲区,只能读取二进制,需要知道文件的格式并接受
标准IO操作 文件指针,有缓冲区,可以读取各种需要的格式
联系
都需要 操作文件的光标,
文件IO可以实现标准IO的全部功能,标准IO中fread和fwrite也可以实现文件IO的效果。
牛客
f