当前位置: 首页 > 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

运行结果

在这里插入图片描述

http://www.lryc.cn/news/500581.html

相关文章:

  • 【Vue3项目实战系列一】—— 从零开始一个vue3项目 vue3+javascript+vite 非常详细 手把手教学
  • Python_Flask04(牛马问答平台01)
  • Java转C之并发和多线程
  • 针对一个系统的权限管理这样的业务场景,使用各设计模式解说
  • Android AppCompatImageView View.Gone状态切换到View.VISIBLE重新layout,Kotlin
  • 在云上轻松部署达梦数据库
  • 什么是厄尔米特(Hermitian)矩阵?
  • React - useActionState、useFormStatus与表单处理
  • v3账号密码登录随机图片验证码
  • 不只是请求和响应:使用Fiddler解读Cookie与状态码全指南(下)
  • java+springboot+mysql游乐园管理系统
  • @RequestBody,getparameter,@RequestParam,@PathVariable之间的区别和联系
  • Linx下自动化之路:Redis安装包一键安装脚本实现无网极速部署并注册成服务
  • VMware虚拟机搭建和镜像配置
  • 红日靶场vulnstark 4靶机的测试报告[细节](一)
  • 深入详解人工智能机器学习常见算法——线性回归算法
  • Python 开发环境搭建
  • OpenCV相机标定与3D重建(9)相机标定函数calibrateCameraRO()的使用
  • flink终止提交给yarn的任务
  • 算法刷题Day14:BM36 判断是不是平衡二叉树
  • 【Golang】Go语言编程思想(六):Channel,第一节,介绍Channel
  • 【Flux.jl】 卷积神经网络
  • 大模型在辅导场景的深度应用,猿辅导素养课推出启发性“AI作文通”
  • 深入了解架构中常见的4种缓存模式及其实现
  • Hermes engine on React Native 0.72.5,function无法toString转成字符串
  • Spring Boot + MySQL 多线程查询与联表查询性能对比分析
  • Java 设计模式~工厂模式
  • OmicsTools生信环境全自动化安装配置教程,代做生信分析和辅导
  • 鸿蒙HarmonyOS应用开发 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
  • 二分模板题