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

关于Linux编程3:fread/fwrite/流的定位/文件IO

流的定位

1. 概念:

设置流的偏移量

2. 偏移量的设置:

1. fseek

原型:int fseek(FILE *stream, long offset, int whence);
功能:设置流的偏移量的标识
参数:stream:文件流指针offset:偏移量> 0  向后偏移 < 0  向前偏移whence:标识SEEK_SET    文件开头SEEK_CUR    当前位置SEEK_END    文件末尾
返回值:成功返回0 失败返回-1

2ftell

原型:long ftell(FILE *stream);
功能:获得流的偏移量
参数:stream:文件流指针
返回值:成功返回流的偏移量

3rewind

原型:void rewind(FILE *stream);
功能:将流重新定位到开头

1从终端输入一个文件名,获得文件的长度

2从bmp文件中读取图片的宽度和高度

文件IO

1.概念

  • 标准IO是有缓存的IO,文件IO没有缓存,适合于通信、硬件设备操作
  • 标准IO是库函数,文件IO是系统调用

2.系统调用与库函数

  • 系统调用:是Linux内核中的代码,只能在Linux系统中使用
  • 库函数:是对系统调用的封装,可以在不同的操作系统中安装并使用,库函数最终还是要调用系统 调用完成对应功能

3.文件IO函数接口

1. 函数接口:

标准IO                            文件IOfopen                            openfclose                           closefgetc/fputc                      read/writefgets/fputsfscanf/fprintffread/fwritefseek/ftell/rewind               lseek

2. 文件打开:

原型:int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);
功能:打开文件获得操作文件的文件描述符
参数:pathname:要打开的文件路径flags:打开文件的标志,必须包含三者之一O_RDONLYO_WRONLYO_RDWR  O_CREAT         文件不存在创建(注意要给定创建文件的权限)O_TRUNC         文件存在截断为0(清0)O_APPEND        追加O_EXCL          文件存在报错
返回值:成功返回新文件描述符失败返回-1 

注意:

  • 有三个特殊的文件描述符:标准输入(0)、标准输出(1)、标准错误(2)
  • 文件描述符特点:
    • 非负整数
    • 取尚未被占用的最小的非负整数
    • 文件描述符是有上限的,到达上限后再打开会报错误

3. 关闭文件描述符

原型:int close(int fd);
功能:关闭文件描述符

4标准IO对应的文件IO的打开方式( 0664代表操作权限 rdx/rdx/rdx)

标准IO文件IO
rO_RDONLY
r+O_RDWR
wO_WRONLY | O_CREAT | O_TRUNC , 0664
w+O_RDWR | O_CREAT | O_TRUNC, 0664
aO_WRONLY | O_APPEND | O_CREAT, 0664
a+O_RDWR | O_APPEND | O_CREAT, 0664

5. 文件IO读写

1. write

原型:ssize_t write(int fd, const void *buf, size_t count);
功能:向文件描述符中写入buf指向的count个字节的数据
参数:fd:文件描述符buf:要写入的数据空间首地址count:要写入的字节数
返回值:成功返回实际写入的字节数失败返回-1

ex:

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

相关文章:

  • 存储过程作为系统逻辑核心的架构思考 —— 以 SaaS 系统为例
  • 电商双 11 美妆数据分析:从数据清洗到市场洞察
  • 生产环境中Kubernetes Pod 安全上下文与策略的实战经验分享
  • nt!MmCreatePeb函数分析之peb中OSMajorVersion的由来
  • Flutter ExpansionPanel组件(可收缩的列表)
  • 【入门系列】图像算法工程师如何入门计算机图形学?
  • 数据分析基本内容(第二十节课内容总结)
  • MCU外设初始化:为什么参数配置必须优先于使能
  • redis的过期策略和定时器
  • 支持任意 MCP 协议的客户端
  • SQL180 每类试卷得分前3名
  • Mybatis源码解读-Plugin插件源码
  • (C++)继承全解析及运用
  • Labelme从安装到标注:零基础完整指南
  • MySQL基础面试
  • Springboot整合Thrift
  • 移动端网页调试实战,键盘弹出与视口错位问题的定位与优化
  • 汉高携手SAP推出AI驱动的退换货与争议管理解决方案
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:UART Controller,通用异步收发传输器控制器
  • Vue接口平台十三——测试记录
  • Ubuntu 全盘备份
  • 九尾狐未来机械晶核技术
  • k3s部署
  • 电脑硬件详解
  • ZYNQ AXI-GPIO学习——ZYNQ学习笔记8
  • 学习游制作记录(背包UI以及各种物品的存储)8.12
  • kafka 消费者组的概念是什么?它是如何实现消息的点对点和发布/订阅模式?
  • Supabase快速入门与实战指南
  • LangChain 入门学习
  • Spring AI Alibaba - 聊天机器人快速上手