9.1日IO作业
1、使用fread、fwrite实现两个文件的拷贝
#include <myhead.h>
int main(int argc, const char *argv[])
{//打开文件 (标准IO)FILE* fp=NULL;fp=fopen("ready.txt","r");if(fp==NULL){printf("文件打开失败!\n");return -1;}//待写入文件FILE* fp1=NULL;fp1=fopen("wait.txt","w");if(fp1==NULL){printf("文件打开失败!\n");return -1;}//定义字符串读取文件内容char buf[128]="";//循环读取文件内容,直到读完while(1){int i=fread(buf,1,sizeof(buf),fp);if(i<128){ if(feof(fp)){fwrite(buf,1,i,fp1);break;}if(ferror(fp)){printf("fread操作失败!\n");return -1;}}fwrite(buf,1,i,fp1);}printf("拷贝完成\n");fclose(fp);return 0;
}
运行结果
2、使用fread、fwrite实现将一个文件中的所有数字写入到另一个新文件中
#include <myhead.h>
//定义函数用于筛选数字
void num(char *p,char *q,int len)
{int j=0;for(int i=0;i<len;i++){if(p[i]>='0'&&p[i]<='9'){q[j++]=p[i];}}q[j]='\0';
}int main(int argc, const char *argv[])
{//打开文件FILE* fp=NULL;if((fp=fopen("math.txt","r"))==NULL){printf("文件打开失败\n");return -1;}FILE* fp1=NULL;if((fp1=fopen("wait.txt","w"))==NULL){printf("文件打开失败\n");return -1;}//定义变量接收文档中内容char buf[128]="";//循环读取文档while(1){char arr[128]="";int i=fread(buf,1,sizeof(buf),fp);if(i<128){ if(feof(fp)){num(buf,arr,i);fwrite(arr,1,strlen(arr),fp1);break;}if(ferror(fp)){printf("fread操作失败!\n");return -1;}}num(buf,arr,i);fwrite(arr,1,strlen(arr),fp1);}printf("拷贝成功\n");fclose(fp);fclose(fp1);return 0;
}
运行结果
3、使用文件IO完成两个文件的拷贝
#include <myhead.h>
int main(int argc, const char *argv[])
{//打开两个文件int fd=-1,fd1=-1;if((fd=open("ready.txt",O_RDONLY))==-1){perror("打开失败\n");return -1;}if((fd1=open("wait.txt",O_WRONLY|O_CREAT|O_TRUNC,0664))==-1){perror("打开/创建失败\n");return -1;}//定义数组接收文件1内容char buf[128]="";//定义循环,循环读取写入内容while(1){int i=0;if((i=read(fd,buf,sizeof(buf)))<128){if(i==0){write(fd1,buf,i);printf("文件读取完毕!\n");break;}if(i==-1){printf("文件读取出错\n");printf("%s\n",strerror(errno));return -1;}}write(fd1,buf,i);}printf("拷贝成功\n");//关闭文件close(fd);close(fd1);return 0;
}
运行结果
4、 思维导图v
5、自己总结标准IO和文件IO的区别与联系
标准IO来自于C标准库,是对文件IO的一种封装,文件IO来自于操作系统的系统调用
标准IO可移植性高,文件IO可移植性低(依赖操作系统)
标准IO存在缓冲区,文件IO没有缓冲区
标准IO操作文件指针,文件IO操作文件描述符
6、牛客网刷题>=26