当前位置: 首页 > news >正文

嵌入式入门Day26

IO Day2

  • IO相关函数
  • 标准文件流指针
  • 缓冲区刷新时机
  • 作业

在这里插入图片描述

IO相关函数

time

#include <time.h>time_t time(time_t *tloc);功能:返回1970年到现在的秒数参数:计算出来的秒数;返回值;成功返回1970年到现在的秒数,失败返回-1并置位错误码eg:time_t tm;time(&tm); 		//tm将保存计算结果eg:time_t tm;tm = time(NULL); 		//效果与上面相同struct tm *localtime(const time_t *timep);功能:时间的秒数作为参数,算出具体的年月日,时分秒参数;秒数返回值;成功返回tm指针,失败返回NULL并置位错误码struct tm {int tm_sec;    /* Seconds (0-60) */int tm_min;    /* Minutes (0-59) */int tm_hour;   /* Hours (0-23) */int tm_mday;   /* Day of the month (1-31) */int tm_mon;    /* Month (0-11) */int tm_year;   /* Year - 1900 */int tm_wday;   /* Day of the week (0-6, Sunday = 0) */int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */int tm_isdst;  /* Daylight saving time */};

fscanf fprintf

 #include <stdio.h>int fscanf(FILE *stream, const char *format, ...);功能:读取文件内容,按照格式转换字符串的形式存入变量中,遇到空格,回车,tab键(制表符),换行自动结束。参数1:文件指针参数2:格式转换字符串参数345...:需要存储扫描到的结果注意:只能是变量返回值:成功返回读取的项数,失败返回0,到达文件末尾返回EOFint fprintf(FILE *stream, const char *format, ...);功能:将变量或者常量的内容按照格式转换字符串的形式写入到文件,遇到\0写入结束.参数1:文件指针参数2:格式转换字符串参数345...:要存入文件的变量或者常量返回值:成功返回读取的项数,失败返回0,到达文件末尾返回EOF

fread fwrite
主要针对二进制文件的读写操作,内存按照扇区存储,每8个扇区是一块

#include <stdio.h>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);功能:从stream指向的文件中读取nmemb项数据,每一项是size字节,存入到ptr指向的空间。参数1:存储读取内容的指针,可以存储任意类型数据参数2:读取的每一项大小单位是字节参数3:读取的项数参数4:文件指针返回值:成功返回读取的项数,读取到文件末尾返回0,该无法识别读取失败还是读取到文件末尾size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);功能:将ptr指向的数据写入到stream指向的文件中,写入nmemb项,每一项size字节。参数1:存储写入内容的指针,可以存储任意类型数据参数2:写入的每一项大小单位是字节参数3:写入的项数参数4:文件指针返回值:成功返回写入的项数,写入失败返回0

feof ferror

#include <stdio.h>int feof(FILE *stream);功能:检测光标是否到达文件末尾,到达返回非0,未到达返回0参数:文件指针int ferror(FILE *stream);功能:检测光标是否出错,出错返回非0,未出错返回0.参数:文件指针

fseek

#include <stdio.h>int fseek(FILE *stream, long offset, int whence);功能:移动文件内光标函数。参数1:文件指针参数2>0:往后移动字节数<0:往前移动字节数=0:不移动参数3SEEK_SET:从头开始移动SEEK_CUR:从当前位置开始移动SEEK_END:从末尾开始移动eg:光标位于文件的开头fseek(fp,SEEK_SET,0);光标从头向后移动10字节。fseek(fp,SEEK_SET,10);光标从末尾向前移动5字节fseek(fp,SEEK_END,-5);

标准文件流指针

stdin :标准输入流指针 空间:1024
stdout :标准输出流指针 空间:1024
stderr :标准错误流指针 空间:0

缓冲区刷新时机

行缓冲区(stdin stdout)大小1024
不缓冲区(stderr)大小是0
全缓冲区(FILE *fp)大小是4096

行缓冲刷新时机

  1. 程序结束时刷新
  2. 遇到换行时刷新
  3. 输入输出发生切换时刷新
  4. 使用函数fflush手动刷新
  5. 缓冲区溢出时刷新
  6. 关闭输入输出流时也刷新

全缓冲刷新时机

  1. 程序结束时刷新
  2. 输入输出切换时刷新
  3. 缓冲区溢出时刷新
  4. 关闭文件指针刷新

作业

  1. 使用fscannffprintf实现文件拷贝
#include <myhead.h>int main(int argc, const char *argv[])
{FILE *fp1 = fopen("./1.txt" , "r"); 	//只读方式打开1.txtif (NULL == fp1){perror("open");return -1; 			//打开失败}FILE *fp2 = fopen("./2.txt" , "w"); 	//只写方式打开2.txtif (NULL == fp2){perror("open");return -1; 			//打开失败}char buff[1024] = ""; 	//定义缓冲区buffchar ch; 				//用于读取分隔符//判断是否读取成功while (fscanf(fp1,"%s%c",buff,&ch) > 0){//将缓冲区内容写进fp2fprintf(fp2,"%s%c",buff,ch);}return 0;
}

运行结果

在这里插入图片描述

  1. 使用fwritefread实现文件拷贝
#include <myhead.h>int main(int argc, const char *argv[])
{FILE *fp1 = fopen("./homework1.c" , "r"); 	//只读打开文件1if (NULL == fp1){perror("fopen");return -1;}FILE *fp2 = fopen("./3.txt" , "w"); 			//只写打开文件2if (NULL == fp2){perror("fopen");return -1;}char buff[1024] = ""; 		//设置缓冲区int res ;//判断读取是否成功while ((res = fread(buff,sizeof(char),1024,fp1))!=0){fwrite(buff,sizeof(char),res,fp2);}//将流定位到最后一次未写入的开始fseek(fp1,-1024,SEEK_CUR);//清除缓冲区bzero(buff,sizeof(buff));//进行最后一次读取写入fread(buff,sizeof(char),1024,fp1);fwrite(buff,sizeof(char),1024,fp2);fclose(fp1);fclose(fp2);fp1 = NULL;fp2 = NULL;return 0;
}

运行结果

在这里插入图片描述

  1. 使用文件存储注册信息,完成登录系统
//main.c
#include <myhead.h>
#include "signin.h"int main(int argc, const char *argv[])
{int select;if (argc != 2){printf("参数错误\n");return -1;}while (1){	printf("\t\t\t1.注册\n");printf("\t\t\t2.登录\n");printf("\t\t\t0.退出\n");printf("请输入要使用的功能:");scanf("%d",&select);getchar();switch(select){case 1:regist(argv[1]);break;case 2:login(argv[1]);break;case 0:exit(EXIT_SUCCESS);break;default:printf("输入的功能有误");break;}}return 0;
}//signin.c
#include "signin.h"int regist(const char *file)
{char name[20];char code[20];printf("请输入用户名:");fgets(name,sizeof(name),stdin);printf("请输入密码:");fgets(code,sizeof(code),stdin);name[strlen(name)-1] = '\0';code[strlen(code)-1] = '\0';FILE *fp = fopen(file, "a"); 		//追加方式打开if (NULL == fp){perror("fopen");return -1;}fprintf(fp,"%s %s ", name, code); 	//将账户密码写入文件fclose(fp);fp = NULL;return 0;
}int login(const char *file)
{char name[20];char code[20];char name_t[20];char code_t[20];printf("请输入用户名:");fgets(name_t,sizeof(name_t),stdin);printf("请输入密码:");fgets(code_t,sizeof(code_t),stdin);name_t[strlen(name_t)-1] = '\0';code_t[strlen(code_t)-1] = '\0';FILE *fp = fopen(file, "r");if (NULL == fp){perror("fopen");return -1;}while (1){int res = fscanf(fp,"%s %s", name, code);if (EOF == res){break;}if (strcmp(code_t,code) == 0 && strcmp(name_t,name) == 0){printf("登录成功\n");return 0;}}printf("登录失败\n");fclose(fp);fp = NULL;return 0;
}//signin.h
#ifndef SIGNIN_H
#define SIGNIN_H
#include <myhead.h>
int regist(const char *file);
int login(const char *file);
#endif

运行结果

在这里插入图片描述

相关文章:

嵌入式入门Day26

IO Day2 IO相关函数标准文件流指针缓冲区刷新时机作业 IO相关函数 time #include <time.h>time_t time(time_t *tloc);功能&#xff1a;返回1970年到现在的秒数参数&#xff1a;计算出来的秒数&#xff1b;返回值&#xff1b;成功返回1970年到现在的秒数&#xff0c;失…...

【Vue3项目实战系列一】—— 从零开始一个vue3项目 vue3+javascript+vite 非常详细 手把手教学

&#x1f609; 你好呀&#xff0c;我是爱编程的Sherry&#xff0c;很高兴在这里遇见你&#xff01;我是一名拥有十多年开发经验的前端工程师。这一路走来&#xff0c;面对困难时也曾感到迷茫&#xff0c;凭借不懈的努力和坚持&#xff0c;重新找到了前进的方向。我的人生格言是…...

Python_Flask04(牛马问答平台01)

项目名称&#xff1a;牛马问答平台 项目简介&#xff1a;1.主要用来给社会上的牛马们探讨老板的恶心之处。 2. 用来学习交流。 技术手段&#xff1a;Python3.x Flask render_template pymysql flask_sqlalchemy........ 注意该博客为迭代项目&#xff0c;于最后一期展示完整…...

Java转C之并发和多线程

提纲&#xff1a; 概念介绍与对比概述 简述Java与C在并发和多线程方面的核心区别解释C11标准、POSIX、C11 <threads.h>、Pthread等名词 Java多线程与并发回顾 线程、Runnable、ExecutorService概念说明同步关键字与工具类含义 C并发基础 没有Java式的内置线程类&#xf…...

针对一个系统的权限管理这样的业务场景,使用各设计模式解说

通义灵码 下面将介绍如何在Java中使用不同的设计模式来实现权限管理系统。每个设计模式都有其特定的应用场景和实现方式&#xff0c;我们将逐一讲解。 1. 单例模式 (Singleton Pattern) 应用场景&#xff1a;确保权限管理服务在整个系统中只有一个实例&#xff0c;避免重复创…...

Android AppCompatImageView View.Gone状态切换到View.VISIBLE重新layout,Kotlin

Android AppCompatImageView View.Gone状态切换到View.VISIBLE重新layout&#xff0c;Kotlin import android.content.Context import android.util.AttributeSet import android.util.Log import androidx.appcompat.widget.AppCompatImageViewclass MyImageView : AppCompatI…...

在云上轻松部署达梦数据库

达梦数据库&#xff08;DM Database&#xff09;是由达梦数据库有限公司开发的一款关系型数据库管理系统&#xff08;RDBMS&#xff09;。作为国内领先的数据库产品&#xff0c;达梦数据库在政府、金融、能源、电信、交通、医疗、教育等多个行业得到广泛应用&#xff0c;尤其在…...

什么是厄尔米特(Hermitian)矩阵?

厄米矩阵&#xff08;Hermitian Matrix&#xff09;定义 在数学和物理中&#xff0c;厄米矩阵是满足以下条件的复方阵&#xff1a; A A † \mathbf{A}\mathbf{A}^\dagger AA† 其中&#xff0c; A † \mathbf{A}^\dagger A†表示矩阵 A \mathbf{A} A的共轭转置&#xff0c;即…...

React - useActionState、useFormStatus与表单处理

参考文档&#xff1a;react18.3.1官方文档 一些概念&#xff1a; React 的 Canary 和 Experimental 频道是 React 团队用于发布和测试新功能的渠道。 useActionState useActionState 是一个可以根据某个表单动作的结果更新 state 的 Hook。 const [state, formAction, isPe…...

v3账号密码登录随机图片验证码

安装插件 pnpm i identify --save图形验证码组件 <template><div class"s-canvas"><!-- 图形验证码的宽和高都来自于父组件的传值&#xff0c;若父组件没有传值&#xff0c;那么就按当前子组件的默认值进行渲染 --><canvas id"s-canvas&…...

不只是请求和响应:使用Fiddler解读Cookie与状态码全指南(下)

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 不只是请求和响应&#xff1a;使用Fiddler抓包HTTP协议全指南(上)_fiddler 获取响应脚本-CSDN博客https://blog.csdn.net/Chunfeng6yugan/article/details/144005872?spm1001.2014.3001.5501 不只是请求和响…...

java+springboot+mysql游乐园管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的游乐园管理系统&#xff0c;系统包含管理员、员工、用户角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;登录后台&#xff1b;首页数据统计&#xff1b;员工管理&#xff1b;用户管理&#xff1b;游乐项目管理&…...

@RequestBody,getparameter,@RequestParam,@PathVariable之间的区别和联系

RequestBody、RequestParam、PathVariable和getParameter&#xff08;你提到的可能是Java Servlet API中的方法&#xff09;是用于处理HTTP请求参数的不同机制。它们各自有不同的用途和适用场景&#xff0c;下面将详细解释它们之间的区别和联系。 1. RequestBody 用途&#xf…...

Linx下自动化之路:Redis安装包一键安装脚本实现无网极速部署并注册成服务

目录 简介 安装包下载 安装脚本 服务常用命令 简介 通过一键安装脚本实现 Redis 安装包的无网极速部署&#xff0c;并将其成功注册为系统服务&#xff0c;开机自启。 安装包下载 redis-7.0.8.tar.gzhttp://download.redis.io/releases/redis-7.0.8.tar.gz 安装脚本 修…...

VMware虚拟机搭建和镜像配置

VMware虚拟机搭建和镜像配置 下载安装VMware 开始下载 更改安装路径&#xff0c;需要一个大空间的盘 更改后下一步 下一步后&#xff0c;选择不主动升级更新 一直下一步 直到安装完毕 输入许可密钥&#xff0c;我下载的版本是12&#xff0c;输入完成点击输入&#xff…...

红日靶场vulnstark 4靶机的测试报告[细节](一)

目录 一、测试环境 1、系统环境 2、注意事项 3、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、漏洞利用Getshell ①Struts 2 s2-045漏洞 手工利用s2-45漏洞 Msf综合利用 ②Tomcat框架(CVE-2017-12615) ③phpMyAdmin(CVE-2018-12613) 构造语句写入冰蝎木…...

深入详解人工智能机器学习常见算法——线性回归算法

深入解析线性回归算法 线性回归是机器学习和统计学中最基本、最常用的预测建模技术之一。它通过线性关系描述因变量与一个或多个自变量之间的联系&#xff0c;帮助我们进行数据建模和预测。本篇文章将详细介绍线性回归的基础知识、算法原理、核心概念、实现方法以及其在实际问题…...

Python 开发环境搭建

Python 开发环境搭建 flyfish 版本 Ubuntu 22.04.5 LTS PyTorch 2.5.1 cuda 12.4 python 3.12.7安装 Anaconda3 依赖 sudo apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6安装命令 …...

OpenCV相机标定与3D重建(9)相机标定函数calibrateCameraRO()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::calibrateCameraRO 是 OpenCV 中用于相机标定的函数&#xff0c;它允许固定某些点来进行更精确的标定。 函数原型 double cv::calibrateCa…...

flink终止提交给yarn的任务

接上文&#xff1a;一文说清flink从编码到部署上线 1.查看正在执行的flink 访问地址&#xff08;参考&#xff09;&#xff1a;http://10.86.97.191:8099/cluster/apps 2.终止任务 yarn application -kill appID 本文为&#xff1a; yarn application -kill application_17…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

高分辨率图像合成归一化流扩展

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 1 摘要 我们提出了STARFlow&#xff0c;一种基于归一化流的可扩展生成模型&#xff0c;它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流&#xff08;TARFlow&am…...

MeshGPT 笔记

[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭&#xff01;_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...