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

一、思维导图

二、习题

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;
}

运行现象

【嵌入式学习】IO进程线程day02.19_第1张图片

你可能感兴趣的:(学习)