一、思维导图
二、习题
1、使用fread和fwrite完成两个文件的拷贝
#include
int main(int argc, const char *argv[])
{
FILE *fp=NULL;
if((fp=fopen("./218.bmp","r"))==NULL)
{
perror("错误信息");
return -1;
}
FILE *fq=NULL;
if((fq=fopen("./hs1.bmp","w"))==NULL)
{
perror("错误信息");
return -1;
}
char c; //定义数组存储读取的数据
while(1)
{
fread(&c,1,1,fp); //循环读取数据
fwrite(&c,1,1,fq); //将数据写入指定文件
//判断文件是否读取结束
if(feof(fp) ||ferror(fp) )
{
break;
}
}
fclose(fp);
fclose(fq);
return 0;
}
实验现象
2、使用read、write完成两个文件的拷贝
#include
int main(int argc, const char *argv[])
{
//定义复制文件的文件描述符
int tp=-1;
if((tp=open("./218.bmp",O_RDONLY))==-1)
{
perror("错误信息");
return -1;
}
//定义被复制文件的文件描述符
int tq=-1;
if((tq=open("./hs.bmp",O_WRONLY|O_CREAT|O_TRUNC,0644))==-1)
{
perror("错误信息");
return -1;
}
//读取文件218.bmp的数据
char str[1024]=""; //定义数组存储文件数据
int t;
while((t=read(tp,str,sizeof(str)))>0)
{
//将字符串数组内的数据写入文件hs.bmp中
write(tq,str,t);
}
close(tq);
close(tp);
return 0;
}
实验现象
3、将时间在文件中跑起来
#include
int main(int argc, const char *argv[])
{
FILE *p=NULL;
//定义数组存储时间相关元素
char time_buf[1024]="";
//定义行号
char str[100];
//定义读取数组
char rd[100]="";
while(1)
{
//调用时间函数
time_t sysTime=time(NULL);
struct tm *t=localtime(&sysTime);
//以追加可读的方式打开文件
if((p=fopen("./time.txt","a+"))==NULL)
{
perror("错误信息");
return -1;
}
//循环查找最后一行的行号
int count=0;
while(fgets(str,sizeof(str),p)!=NULL)
{
count++;
}
//利用时间函数将元素放置到数组里
snprintf(time_buf,sizeof(time_buf),"%d-%d:%d:%d %d:%d:%d\n",count,t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
//将数组写入到指定文件中
fwrite(time_buf,strlen(time_buf),1,p);
//移动光标至读取时间位置
fseek(p,-strlen(time_buf),SEEK_END);
fread(rd,strlen(time_buf),1,p); //输出读取数据
printf("%s",rd);
//设置循环延时1秒
sleep(1);
fclose(p); //关闭文件
}
return 0;
}
运行现象