33、IO/标准IO对图片操作练习及文件IO相关练习20240219

一、使用fread和fwrite完成两个图片文件的拷贝(标准IO)。

代码:

#include<myhead.h>

int main(int argc, const char *argv[])
{
	FILE *srcfp=NULL;
	FILE *destfp=NULL;
	if((srcfp=fopen("./hongfeng.bmp","r"))==NULL || (destfp=fopen("./yezi.bmp","r+"))==NULL)
	{
		perror("fopen error");//打开两个图片文件
		return -1;
	}
	int bmpSizeh=0;
	int bmpSizey=0;
	fseek(srcfp,2,SEEK_SET);//光标移动到存放图片数据大小的位置
	fseek(destfp,2,SEEK_SET);

	fread(&bmpSizeh,sizeof(int),1,srcfp);//读取图片大小
	fread(&bmpSizey,4,1,destfp);

	printf("bmpSizeh=%d bmpSizey=%d\n",bmpSizeh,bmpSizey);//输出大小

	fseek(srcfp,54,SEEK_SET);//光标移动到图像像素矩阵位置
	fseek(destfp,54,SEEK_SET);

	unsigned char color[3]={0,0,0};//定义一个数组存放每个像素点的颜色数值

	for(int i=0;i<500;i++)
	{
		for(int j=0;j<800;j++)
		{
			fread(color,sizeof(color),1,srcfp);//从hongfeng.bmp中保存一个像素点数据
			fwrite(color,sizeof(color),1,destfp);//拷贝到yezi.bmp对应的位置
		}
	}

	fclose(srcfp);//关闭文件
	fclose(destfp);


	return 0;
}

运行:

二、 使用read、write完成两个文件的拷贝(文件IO)。

代码:

#include<myhead.h>

int main(int argc, const char *argv[])
{
	int srcfd= -1,destfd= -1;
	if((srcfd=open("./1.c",O_RDONLY))==-1 || (destfd=open("./2.txt",O_WRONLY|O_CREAT|O_APPEND,0664))==-1)
	{
		perror("open error");//只读形式打开1.c 只写|创建|追加形式打开2.txt;
		return -1;
	}
	printf("open success srcfd=%d destfd=%d\n",srcfd,destfd);//打开成功输出文件描述符

	char ch[128]="";
	while(1)
	{
		ssize_t res=read(srcfd,ch,sizeof(ch));//从1.c中复制数据
		if(res==0)     //读取失败返回-1,结束循环;
			break;
		write(destfd,ch,res);//向2.txt写入数据
	}

	close(srcfd);//关闭文件
	close(destfd);
	return 0;
}

运行:

三、将时间在文件中输出 按秒刷新:

如1、17:30:41

2、17:30:42

3、17:30:43

键入ctrl+c,结束进程后

...

4、17:35:28

5、17:35:29

代码:

#include<myhead.h>

int main(int argc, const char *argv[])
{
	while(1)//外部循环控制
	{
		int fd=-1;
		if((fd=open("./time.txt",O_RDWR|O_CREAT|O_APPEND,0664))==-1)
		{
			perror("open error");//创建time.txt文件并追加打开
			return -1;
		}
		int line=1;//行号1开始
		while(1)
		{
			char temp;
			ssize_t rew=read(fd,&temp,1);//按字符遍历文件内数据存入temp
			if(rew<=0)//遍历结束条件;
				break;
			if(temp=='\n')
				line++;//记录行号
		}
		time_t sysTime=0;
		time(&sysTime);//获取秒数
		struct tm *t=localtime(&sysTime);//获取结构体
		char ch[32]="";//存入时间的字符串
		snprintf(ch,sizeof(ch),"%2d、%2d:%2d:%2d\n",line,t->tm_hour,t->tm_min,t->tm_sec);
		write(fd,ch,strlen(ch));//将字符串中的行、小时:分钟:秒存入文件
		write(2,ch,strlen(ch));//在终端输出
	
		sleep(1);//休眠一秒
		close(fd);
	}
	return 0;
}

运行:

思维导图:

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值