华清IOday2 24-7-29

1> 写一个日志文件,将程序启动后,每一秒的时间写入到文件中

1、2024- 7-29 10:31:19

2、2024- 7-29 10:31:20

3、2024- 7-29 10:31:21 ctrl+c:停止程序 ./a.out

4、2024- 7-29 10:35:06

5、2024- 7-29 10:35:07

6、2024- 7-29 10:35:08

main.c

#include <myhead.h>
int main(int argc, const char *argv[])
{
	FILE *fp = NULL;
	if ((fp = fopen("./time.txt", "a+")) == NULL)
	{
		perror("fopen error");
		return -1;
	}
	char bufold[30] = " ";				//用来存放第一次取出的时间
	char bufnew[30] = " ";				//用来存放第二次取出的时间
	char buf[128] = " ";				//存放fgets取出的数组
	int line = 0;						//记录行号
	while (fgets(buf, sizeof(buf), fp)) //在数据写入前统计文件中一共有几行
	{
		line++;
	}
	line++;
	while (1)
	{
		//第一次读取时间
		time_t sys_time = time(NULL);
		struct tm *time_ptr = localtime(&sys_time);
		//将第一次读取的时间存放在bufold中
		sprintf(bufold, "%d %4d-%d-%d %2d:%2d:%2d\n", line,
				time_ptr->tm_year + 1900,
				time_ptr->tm_mon + 1,
				time_ptr->tm_mday,
				time_ptr->tm_hour,
				time_ptr->tm_min,
				time_ptr->tm_sec);
		printf("bufnew = %s\n", bufold);
		while (1)
		{
			//取出要比较的时间
			time_t sys_time = time(NULL);
			struct tm *time_ptr = localtime(&sys_time);
			//将要比较的时间放入bufnew中
			sprintf(bufnew, "%d %4d-%d-%d %2d:%2d:%2d\n", line,
					time_ptr->tm_year + 1900,
					time_ptr->tm_mon + 1,
					time_ptr->tm_mday,
					time_ptr->tm_hour,
					time_ptr->tm_min,
					time_ptr->tm_sec);
			//比较两个时间是否不同,如果不同表示时间过了一秒,把时间写入到文本中
			if ((strcmp(bufold, bufnew)) != 0)
			{
				line++;
				fwrite(bufnew, 1, strlen(bufnew), fp);
				break;
			}
			//刷新缓冲区
			fflush(fp);
		}
	}
	fclose(fp);
	return 0;
}

2> 使用fread、fwrite完成两个文件的拷贝不允许只读写一次

#include<myhead.h>
int main(int argc, const char *argv[])
{
	FILE *src = NULL;
	if((src = fopen("./time.txt","r"))==NULL)//把src当成要复制的文件地址
	{
		perror("fopen error");
		return -1;
	}
	FILE *dest = NULL;
	if((dest = fopen("./zy2.txt","w"))==NULL)//把src当成被复制的文件地址
	{
		perror("fopen error");
		return -1;
	}
	char n;
	while(fread(&n,1,sizeof(n),src))//每次从src指向的文件中读取sizeof(n)项大小的一个项放入到n中,直到文件读取结束
	{
		fwrite(&n,1,sizeof(n),dest);//将读取到的n写入发哦dest指向的文件中
	}
	fclose(src);
	fclose(dest);
	return 0;
}

 

3> 实现对bmp图像的读写操作

#include<myhead.h>

int main(int argc, const char *argv[])
{
    //定义文件指针
    FILE *fp = NULL;
    if((fp = fopen("./gg.bmp", "r+")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //获取文件大小
    int img_size = 0;

    //将文件光标偏移2个字节
    fseek(fp, 2, SEEK_SET);

    //读取4字节的内容
    fread(&img_size, sizeof(img_size), 1, fp);

    printf("size = %d\n", img_size);        //图像大小

    //从头向后偏移54字节后,就是图像数据
    fseek(fp, 54, SEEK_SET);

    //定义一个像素
    unsigned char color[3] = {0, 0, 255};     //正红色
    for(int i=0; i<960/2; i++)          //外行
    {
        for(int j=0;j<1280; j++)       //内列
        {
            fwrite(color, sizeof(color), 1, fp);
        }
    }

    //关闭文件
    fclose(fp);

    return 0;
}

4> 君子作业:给图像打马赛克

#include<myhead.h>

int main(int argc, const char *argv[])
{
    //定义文件指针
    FILE *fp = NULL;
    if((fp = fopen("./gg(复件).bmp", "r+")) == NULL)
    {
        perror("fopen error");
        return -1;
    }
    //获取文件大小
    int img_size = 0;
    //将文件光标偏移2个字节
    fseek(fp, 2, SEEK_SET);
    //读取4字节的内容
    fread(&img_size, sizeof(img_size), 1, fp);
    printf("size = %d\n", img_size);        //图像大小
    //从头向后偏移54字节后,就是图像数据
    fseek(fp, 54, SEEK_SET);
    //定义一个像素
    unsigned char color[3] = " ";     //正红色
    for(int i=0; i<960; i++)          //外行
    {
        for(int j=0;j<1280; j++)       //内列
        {
                fread(color,sizeof(color),1,fp);
                for (int k =0; k < 20; k++)
                {
                    for ( int m = 0; m < 20; m++)
                    {
                         fwrite(color, sizeof(color), 1, fp);
                    }
                   j++;
                }       
        }
    }
    //关闭文件
    fclose(fp);
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值