【IO】 对于fread,fwrite,time_t,fseek等操作,写日志文件,完成文件的拷贝,对bmp图像进行读写操作;

news2024/9/20 18:33:37

目录

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

​编辑

2>使用fread、fwrite完成两个文件的拷贝

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


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

#include <stdio.h>
#include <time.h>
#include <stdlib.h>


int read_count();
void write_count(int count);

int main(int argc, char const *argv[])
{
    // 定义变量存储秒数
    time_t new_time;
    time_t last_time = 0;

    // 存放转变后的字符串
    char buf[128] = "";

    // 序号变量,从文件读取
    int count = read_count();

    while(1)
    {
        new_time = time(NULL);

        if(new_time != last_time)
        {
            // 将秒数转换为结构体
            struct tm *time_ptr = localtime(&new_time);

            // 把当前时间转换成字符串放入字符数组中,并添加序号
            sprintf(buf, "%d. %4d-%02d-%02d %02d:%02d:%02d\n",
                    count,
                    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("%s", buf);

            last_time = new_time;
            count++; // 更新序号

            // 将更新后的序号写入文件
            write_count(count);
        }
    }

    return 0;
}

// 从文件读取计数器的值
int read_count() {
    FILE *fp = fopen("count.txt", "r");
    if (fp == NULL) {
        // 如果文件不存在,返回1开始计数
        return 1;
    }
    int count;
    if (fscanf(fp, "%d", &count) != 1) {
        // 如果读取失败,返回1开始计数
        count = 1;
    }
    fclose(fp);
    return count;
}

// 将计数器的值写入文件
void write_count(int count) {
    FILE *fp = fopen("count.txt", "w");
    if (fp != NULL) {
        fprintf(fp, "%d", count);
        fclose(fp);
    }
}

输出结果如下:


2>使用fread、fwrite完成两个文件的拷贝

#include <myhead.h>

int main(int argc, char const *argv[])
{
    FILE *fp = NULL, *fpw = NULL;
    char temp;

    //判断输入是否符合要求
    if(argc != 2)
    {
        printf("You should input:./a.out file_name\n");
        return -1;
    }

    // 打开源文件用于读取
    if ((fp = fopen(argv[1], "r")) == NULL) 
    {
        perror("fopen error");
        return -1;
    }

    // 创建或打开目标文件用于写入
    if ((fpw = fopen("./user_copy.txt", "w")) == NULL) 
    {
        perror("fopen error");
        fclose(fp);
        return -1;
    }

    // 读取源文件并写入目标文件
    while (fread(&temp, sizeof(temp), 1, fp) == 1)
    {
        fwrite(&temp, sizeof(temp), 1, fpw); // 写入目标文件流 fpw
    }

    //关闭文件
    fclose(fp);
    fclose(fpw);
    return 0;
}

输出结果如下:

可以看到已经把02fcopy.c文件拷贝到了目标文件user_copy.txt里


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

#include<myhead.h>

int main(int argc, char const *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] = {255,0,0};  //蓝色

    for(int i = 0;i < 960;i++)
    {
        for(int j = 0;j < 1280;j++)
        {
            fwrite(color,sizeof(color),1,fp);
        }
    }

    fclose(fp);

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1967628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql排查锁等待

排查锁等待步骤 最近线上碰到了几次mysql锁等待的问题&#xff0c;一个事务线程长期占用锁资源&#xff0c;导致其他事务无法获取到锁&#xff0c;为了快速解决问题&#xff0c;我们把线程kill掉了&#xff0c;但后面就定位不到具体的问题了&#xff0c;这里我总结整理一下我的…

【C语言】qsort详解——能给万物排序的神奇函数

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:https://blog.csdn.net/huangcancan666/category_12718530.html &#x1f381;代码托管:qsort的使用和模拟实现 a96cdd4 黄灿灿/C语言 - Gitee.com ⚙️操作环境:Visual Studio 2022 目录 一、引言 二、…

java编程练习(初学者)每日练题

一、前言&#xff08;目前java的就业环境&#xff09; Java仍然是IT行业中最受欢迎和广泛使用的编程语言之一&#xff0c;特别是在企业级应用、后端服务、金融系统、大型网站、游戏开发等领域。Java岗位的需求依然强劲&#xff0c;体现在多个方面&#xff1a;1.企业级应用&…

Linux通过Docker安装Microsoft Office+RDP远程控制

之前写过一篇使用KVM虚拟机安装Microsoft OfficeRDP远程控制的文章&#xff0c;根据B站的教程安装后&#xff0c;发现有远程控制延迟的问题&#xff0c;比如拖动Office窗口时会延迟&#xff0c;搜狗输入法扫一下就闪退&#xff0c;插入形状后无法调整大小&#xff0c;无法调整图…

十七、【人工智能】【机器学习】【非监督学习】- K-均值 (K-Means)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

热门超声波清洗机有哪些?值得入手的超声波清洗机品牌推荐

相信大家对超声波清洗机并不陌生&#xff0c;每次眼镜脏了&#xff0c;去眼镜店清洗时&#xff0c;店员使用的就是超声波清洗机。这种机器通过超声波的原理&#xff0c;能深入清洁物品内部&#xff0c;清洁效果非常好。相比于手动清洗&#xff0c;超声波清洗机可以在清洁过程中…

PHP健身微信小程序系统源码

&#x1f3cb;️‍♀️健身新潮流&#xff01;解锁“健身微信小程序”的全方位塑形秘籍 &#x1f4f1;开篇&#xff1a;掌中健身房&#xff0c;随时随地动起来 你还在为找不到合适的健身场地或教练而烦恼吗&#xff1f;是时候告别这些束缚&#xff0c;拥抱“健身微信小程序”…

身在职场,要认清的3个真理,让你把同事远远甩在身后

总有人被一些表面的现象所以蒙蔽&#xff0c;还沾沾自喜以为自己掌握了“真理”。职场上从来不缺“好心人”&#xff0c;总是用所谓的经验来告诫别人&#xff0c;应该如何做事。 大家都在说的事情&#xff0c;就一定是对的&#xff1f;那么为什么大多数人还活不成自己想成为的…

基于“日志审计应用”的 DNS 日志洞察实践

作者&#xff1a;羿莉 (萧羿) 基础背景 DNS(Domain Name System) [ 1] 是任何网络活动的基础。它将易于记忆的域名转换为机器能够理解的 IP 地址。监控 DNS 服务可以帮助用户识别网络活动并保持系统安全。出于合规和安全性的考虑&#xff0c;公司通常要求对网络日志进行存储和…

手撕算法题3 (附源码和思路)

算法 1.有效的括号2.用队列实现栈3.用栈实现队列3.设计循环队列 1.有效的括号 有效的括号 思路 借助栈这样的数据结构&#xff0c;将所有左括号进行入栈&#xff0c;所有右括号与出栈的括号比较&#xff0c;相同循环继续&#xff0c;不同直接返回false。循环结束后检查栈是否为…

模拟队列--C++

用数组来表示队列&#xff0c;怎么表示呢&#xff1f;我们先假设hh为头&#xff0c;tt为尾,当弹出队头的时候我们只需要把hh加一下就连可以了&#xff0c;相反tt一样也可以 #include<iostream> using namespace std; const int N1e510; int a[N],tt-1,hh0;//hh头 tt尾 i…

2.Linux_vi编辑器

打开/创建文件 1、打开/创建文件 指令&#xff1a;vi 文件名 若文件不存在&#xff0c;则新建一个文件&#xff1b;若文件存在&#xff0c;则打开这个文件。 2、打开文件时&#xff0c;指定光标的位置 指令&#xff1a;vi 文件名 行号 注意&#xff1a;""和行号…

吴恩达机器学习-C1W3L1-逻辑回归分类

在本实验中&#xff0c;您将对比回归和分类。 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from lab_utils_common import dlc, plot_data from plt_one_addpt_onclick import plt_one_addpt_onclick plt.style.use(./deeplearning.mplstyle)分类…

JDK 8 升级 17 及 springboot 2.x 升级 3.x 指南

JDK 8 升级 17 简介 从 JDK 8 升级到 JDK 17 的过程中&#xff0c;有几个主要的变化&#xff0c;特别是 Java Platform Module System (JPMS) 的引入&#xff0c;以及一些包路径的调整。以下是与 JDK 17 相关的一些重要变化&#xff1a; Java Platform Module System (JPMS) …

The First项目报告:解读Trading Bot黑马,交易狙击手Banana Gun

Meme币市场的特点是高度投机性和波动性&#xff0c;一个项目可能在短时间内实现巨大涨幅&#xff0c;为投资者带来巨额回报。然而&#xff0c;这种市场也充满了不确定性&#xff0c;许多项目可能只是短暂的炒作&#xff0c;缺乏实际价值或长期发展的潜力。因此&#xff0c;对于…

实验2-4-3 求奇数分之一序列前N项和

//实验2-4-3 求奇数分之一序列前N项和#include<stdio.h> #include<math.h> int main(){int n;scanf("%d",&n);//输入正整数N&#xff1b;double sum0;for (int i 1; i < n * 2; i 2)/* 在表达式 for (int i 1; i < n * 2; i 2) 中&#x…

设计模式-策略模式的完整代码示例及测试验证

策略模式 什么是策略模式&#xff1f; 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以互换。 策略模式使得算法可以在不影响客户端的情况下发生变化。策略模式主…

研0 冲刺算法竞赛 day26 P1803 凌乱的yyy / 线段覆盖

P1803 凌乱的yyy / 线段覆盖 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 考点&#xff1a;线段覆盖 思路&#xff1a;将整体结束时间进行排序&#xff0c;在从头开始遍历计数 代码&#xff1a; #include<iostream> #include <algorithm> using namespace …

从零开始学习机器学习,掌握AI未来的关键!

从零开始学习机器学习 1. 介绍1.1 人工智能&#xff08;AI&#xff09;概述1.2 机器学习在人工智能中的应用1.3 机器学习基础概念 2. 监督学习2.1 什么是监督学习2.2 回归分析2.3 分类问题2.4 模型评估和选择 3. 无监督学习3.1 什么是无监督学习3.2 聚类算法3.3 降维技术 4. 深…

Spring源码解析(27)之AOP的核心对象创建过程2

一、前言 我们在上一节中已经介绍了Advisor的创建过程&#xff0c;当时我们创建的logUtil这bean&#xff0c;他在 resolveBeforeInstantiation返回的是null&#xff0c;那么就会继续往下执行doCreateBean方法。 二、源码分析 protected Object doCreateBean(String beanName,…