【嵌入式学习】IO进程线程day02.19

本文介绍了使用C语言中的fread/fwrite和read/write函数实现两个文件的拷贝,并演示了如何在time.txt文件中实时记录当前时间,展示了基础的文件操作技巧。
摘要由CSDN通过智能技术生成

一、思维导图

二、习题

1、使用fread和fwrite完成两个文件的拷贝

#include <myhead.h>
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 <myhead.h>
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 <myhead.h>
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;
}

运行现象

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值