当前位置: 首页 > 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.mrgr.cn/news/79585.html

相关文章:

  • android NumberPicker隐藏分割线或修改颜色
  • android notification
  • Python 检验项目分析与历次报告比对
  • SpringBoot3整合SpringMVC
  • 制造业信息化系统:构建高效生产与管理的数字化基石
  • 阿里云 云产品流转(实现设备与小程序交互)
  • c++ 学习笔记 函数进阶
  • Python知识分享第二十二天-数据结构入门
  • LEGO-GraphRAG框架-图谱检索增强生成框架介绍
  • Ubuntu 安装 web 服务器
  • 11—增加/移除OrCAD的Xnet(保姆级)
  • [HDCTF 2023]LoginMaster
  • AI绘画设计实战-Day2
  • 【Rive】波动文字
  • AES 与 SM4 加密算法:深度解析与对比
  • OpenSearch Dashboard 权限管理:如何设置只读权限
  • 基于SpringBoot+Vue的旅游网站管理系统
  • MySQL--》如何在SQL中巧妙运用函数与约束,优化数据处理与验证?
  • 计算机毕业设计SpringBoot+Vue.js知识图谱课程推荐系统 课程预测系统 mooc慕课课程爬虫 课程大数据 课程数据分析大屏 大数据毕业设计 大
  • windows ping 执行过程分析