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

学习嵌入式的第十八天——Linux——文件编程

文件编程

Linux中一切皆文件

文件编程的学习:

1.基于 C库 提供的 标准IO的函数 实现 
2.基于 操作系统 提供的 系统调用 实现 

文件编程的基本流程:

1.打开文件

2.读写文件

3.关闭文件

Linux中文件类型

常用的标准IO函数

系统中,默认打开了三个文件,直接可以用 
标准输入 --- stdin   --- 关联到键盘 
标准输出 --- stdout  --- 关联到屏幕
标准出错 --- stderr  --- 关联到屏幕 

fopen

FILE *fopen(const char *pathname, const char *mode);

功能:
流打开函数 
打开 pathname指定的文件,并 关联一个流 
参数:
@pathname  表示要打开的文件  //eg: 文件名 对应的字符串 
@mode      模式   
r    只读
r+   读写 
注意: 文件必须已经存在 ,不存在,则打开失败 
w    只写
w+   读写
注意: 如果文件存在,截断成0,不存在,则创建 
a    追加的写 
a+   追加的读写 
注意: 
如果文件存在,则在末尾写
不存在,则创建

返回值:
成功 返回FILE *指针
失败 NULL 并 设置errno 用来表明错误原因 

errno 是系统设计错误码 的全局变量 
// errno = 2
perror("想要输出的字符串");
输出效果:
想要输出的字符串:错误原因

1.流 是什么 ? 
流 是 内存 和 硬盘直接 形成一个 数据通道 
2.FILE * 
流指针 
关联到这个流上 
代表这个流 
3.fopen的作用 
相当于 将 硬件上的文件 转换为 了 内存的的流指针 
流指针 
描述的是文件操作的这个动态的对象

fgetc/fputc

单个字符读写 

int fgetc(FILE *stream);
功能:
从stream中读取字符 
参数:
@stream  要读取的文件流指针 
返回值:
成功 读取到的字符的ASCII码值 
失败 EOF 
注意:  
文件结尾也是EOF

getchar() <=> fgetc(stdin);    

fgets/fputs

 char *fgets(char *s, int size, FILE *stream);     
功能:
从stream 中读取一个字符串 
将字符串,保存到s指定的size大小一块空间
参数:
@s  表示存储读取结果的 一块字符空间 
@size  表示一次读取多少个字节 
@stream 就是要读取的文件 
返回值:
成功 返回 s
失败 NULL 
注: 
1. 读到文件结尾也返回NULL     
出错也是NULL 
【问题】 --- 那么如果返回值为NULL  
到底是出错了,还是到达文件结尾了?——feof(),ferror()
2. fgets 读取结束 
(1) EOF会结束    //读到文件结尾  --- EOF并不存在文件中,只是到达结尾时的标志 
(2) 遇到'\n'     // '\n' 会被 读取到最终的 buffer中
(3) 读满size-1个 
3.fgets 会自己在 buffer中最后一个字符的后面 加 '\0' --- 处理成字符串 
4.fgets 比 gets 更安全
可以指定读取多少个字节的数据 
fgets 更推荐使用 

int fputs(const char *s, FILE *stream);
功能:
将s中的字符串,输出到 stream对应文件中 
参数:
@s       要输出的字符串的地址 
@stream  要输出到的文件 
返回值:
成功 非负值
失败 EOF  

注意:
fputs 不会自动输出一个 '\n'
puts //自动会输出一个 '\n'
fputs输出结束的条件 ---是遇到 '\0'

fread/fwrite

 按对象读写  二进制读写函数

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
从指定的文件中stream读取nmemb个元素,每个元素size大小的 这么多个数据,
存放到ptr指定的一块空间 
参数:
@ptr 存储数据的空间的首地址 
@size 单个元素的大小 
@nmemb 多少个元素 
@stream 要读取的流指针 
返回值:
成功 返回读取到的对象个数
失败 0 
到达结尾返回0
用途:
用来处理 文件中 操作对象 固定单一这种 
比如结构体

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
将ptr所在空间的额 nmemb个大小为size的元素,写到stream对应的文件中    
参数:
@ptr   存储数据的空间的首地址 
@size  单个元素的大小 
@nmemb 多少个元素 
@stream 要写的的流指针 
返回值:
成功 返回写入的对象个数
失败 0 

注:
fread 和 fwrite配合用时 
int ret = fread(buf,sizeof(int),10,fp);
fwrite(buf,sizeof(int),ret,stdout); //成功读取多少个就输出多少个 

fclose

关闭打开的文件

fclose()
int fclose(FILE *stream);
功能:
关闭流指针,并且刷新流中的数据到指定位置 
// 关闭底层的文件描述符 
返回值:
成功 0
失败 EOF

feof/ferror

int feof(FILE *stream); //检查是否到达文件结尾
int ferror(FILE *stream);//检查是否出错 

http://www.dtcms.com/a/328614.html

相关文章:

  • nexus-集成prometheus监控指标
  • 力扣面试150题--爬楼梯 打家劫舍 零钱兑换 最长递增子序列
  • DDD之工程结构(7)
  • 数据库规范化:消除冗余与异常的核心法则
  • 用 Spring 思维快速上手 DDD——以 Kratos 为例的分层解读
  • 当赞美来敲门:优雅接纳的艺术
  • 在线免VIP的动漫网站
  • 【沧海拾昧】使用LibUsbDotNet进行Windows/Ubuntu跨平台串口管理
  • 当人工智能照进现实:机遇与挑战的双重奏
  • SQL 合并两个时间段的销售数据:FULL OUTER JOIN + COALESCE
  • vue文件或文件夹拖拽上传
  • 悬空标记攻击 -- idekctf 2025 CTFinder
  • qt界面优化--api绘图
  • 杰里常用功能API
  • 科普:python中的“__init__.py”与“import”的关系
  • React中的Hook到底是个什么鬼
  • 北京-4年功能测试2年空窗-报培训班学测开-第七十四天-线下面试-聊的很满意但可能有风险-等信吧
  • mysql中的常见的索引类型及其特点
  • 【活动回顾】开源共建 · 智能体时代的 AI 基础设施全栈实践
  • 并发编程中的 ABA 问题:从原理到实战解决方案
  • Java数据结构之LinkedList
  • 电子电路原理学习笔记---第5章特殊用途二极管---第2天
  • 基于51单片机RFID智能门禁系统红外人流量计数统计
  • -bash: ./restart.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录
  • MySQL 从入门到精通:基础概念与操作指南
  • Sklearn 机器学习 异常值检测 局部异常因子算法LOF
  • SQL连接操作全解析:从入门到精通
  • 某跨国金融机构法律法规自动文本摘要(ATS/文本大意提取)功能规划
  • 嵌入式第二十六天(文件IO相关操作)
  • [Robotics_py] docs | 机器人状态/位姿 | 环境表示_栅格地图