嵌入式学习——Linux高级编程复习(文件IO)——day37

1. 文件IO——(无缓存、文件描述符)

1.1 定义

        文件IO是指文件输入/输出,是计算机程序中用于读取和写入文件的操作。通过文件IO,程序可以从文件中读取数据到内存中,或者将内存中的数据写入文件中,文件可以是磁盘上的普通文件、设备文件(如打印机、磁盘驱动器)、管道、套接字等。文件IO是与外部存储介质(如硬盘、固态硬盘、闪存驱动器等)交互的主要方式,它允许程序与文件系统进行通信,实现数据的持久化存储和读取。

        文件IO是一种没有缓存的IO形式(即刻交给linux内核,及时性)

        文件IO是系统调用,系统调用是Linux内核中的函数接口,只能在Linux内核中使用

1.2 主要操作步骤

        1. 打开文件

        使用如open(在POSIX系统中)或fopen(在C标准库中)这样的函数,为文件创建一个文件描述符或文件指针,以便后续读写操作。

        2. 读取和写入数据

        通过文件描述符或文件指针,使用如read/write(POSIX)或fread/fwritefscanf/fprintf(C标准库)等函数来读取或写入数据。

        3. 定位文件指针

        在需要时,可以使用如lseek(POSIX)或fseek(C标准库)来移动文件内部的读写位置。

        4. 关闭文件

        完成所有操作后,通过close(POSIX)或fclose(C标准库)函数关闭文件,释放系统资源。

1.3 文件描述符

        文件描述符是操作系统中用于标识一个文件或者其他I/O资源的整数。在Unix-like系统中,每个打开的文件、套接字、管道等都会分配一个唯一的文件描述符。文件描述符通常是非负整数,其中0、1和2分别预留给标准输入、标准输出和标准错误。通过文件描述符,程序可以对文件或其他I/O资源进行读取、写入和其他操作。

2. 文件IO的函数接口总结

    1.open/close
    2.read/write 
    3.lseek 

2.1 open

        1. 定义

            int open(const char *pathname, int flags);

        2. 功能

                打开文件并获得操作文件的文件描述符

        3. 参数

                pathname:要打开的文件路径对应字符串的首地址
                flags:
                    O_RDONLY        只读
                    O_WRONLY        只写
                    O_RDWR            读写
            
                    O_CREAT                文件不存在创建(需要open传入第三个参数)
                    O_TRUNC               文件存在截断成0(清0)
                    O_APPEND              追加打开
                    O_ASYNC                异步IO
                    O_NONBLOCK        非阻塞IO
                    O_EXCL                    检测文件是否存在 

        4. 返回值

                成功返回新文件描述符
                失败返回-1 

        5. 示例程序

        6. 注意

2.2 close

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.3 write

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.4 read

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.5 lseek

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

3. Linux系统中获取时间的函数接口

3.1 time

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

3.2 localtime 

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

3.3  mktime

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4. 文件流指针和文件描述符的相互转化函数

4.1 fileno

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4.2 fdopen

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4.3 feof

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4.4 ferror

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

5. 文件描述符和流指针的区别和联系

5.1 文件描述符

  • 概念:文件描述符是操作系统级别的概念,用于唯一标识已打开的文件或者其他I/O资源的整数。在Unix-like系统中,每个打开的文件、套接字、管道等都会被分配一个文件描述符。
  • 作用:文件描述符用于在系统级别跟踪和管理文件和I/O资源,允许程序与这些资源进行交互。
  • 使用:在C语言中,文件描述符是整数形式表示,通过系统调用函数(如open()read()write())对文件描述符进行读写操作。

5.2 流指针

  • 概念:流指针是高级语言(如C++、Java、Python)中的概念,用于标识当前文件操作位置的指针。
  • 作用:流指针用于记录文件读写的当前位置,允许程序在文件中定位、读取和写入数据。
  • 使用:在C++中,流指针是通过iostream库提供的std::ifstream(文件输入流)、std::ofstream(文件输出流)等对象来操作文件,通过操作符<<>>对文件进行读写。

5.3 联系和区别

  • 文件描述符是操作系统级别的概念,而流指针是高级语言中的概念。
  • 文件描述符是整数用于系统级别的文件和I/O资源管理,而流指针是指向文件操作位置的指针,用于文件读写操作。
  • 在低级别编程中(如C语言),可能需要直接操作文件描述符;而在高级别编程中,通常使用流指针来进行文件操作,而这些流指针会管理文件描述符。

6. 标准IO和文件IO的区别

    1.标准IO是库函数,是针对于系统调用的封装
    2.文件IO是系统调用,是Linux内核中的函数接口
    3.标准IO是有缓存的,文件是没有缓存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python3 笔记:字符串的 startswith() 和 endswith()

1、startswith() 方法用于检查字符串是否是以指定子字符串开头&#xff0c;如果是则返回 True&#xff0c;否则返回 False。如果参数 beg 和 end 指定了值&#xff0c;则在指定范围内检查。 语法&#xff1a;str.startswith(substr, beg0,endlen(string)) 参数&#xff1a; s…

华为OD技术面试-最长回文串-2024手撕代码真题

题目:最长回文串 给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的 回文串 的长度。 在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。 示例 1: 输入:s = "abccccdd" 输出:7 解释: 我们可以构造的最…

基于51单片机水塔水位控制系统

基于51单片机水塔水位控制 &#xff08;仿真&#xff0b;程序&#xff09; 功能介绍 具体功能&#xff1a; 1.用滑动变阻器模拟水位&#xff0c;ADC0809将模拟信号转换为数字信号&#xff1b; 2.LCD1602显示当前水位和水位阈值&#xff1b; 3.当水位超过设定阈值&#xff…

MySQL基础_10.约束

文章目录 第一章、约束1.1 约束的定义1.2 非空约束1.3 唯一性约束1.4 主键约束1.5 自增列1.6 外键约束1.7 CHECK约束1.8 DEFAULT约束 第一章、约束 1.1 约束的定义 约束是对表中字段的限制。 约束按照作用范围可以分为&#xff1a;列级约束和表级约束 列级约束&#xff1a;声…

【二进制部署k8s-1.29.4】十二、ingress-nginx的安装部署

文章目录 简介 一.ingress的安装一.验证安装 简介 本章节主要讲解安装ingress-nginx-v1.10.1的安装&#xff0c;ingress的安装比较简单&#xff0c;只需要下载yaml文件&#xff0c;修改一下镜像地址&#xff0c;原本的镜像地址由于墙的原因&#xff0c;没法直接下载&#xff0c…

C++网络编程——多路IO复用 重点epoll

前言补充 阻塞与非阻塞 同步阻塞IO &#xff08;Blocking IO) : 传统IO模型 同步非阻塞IO &#xff08;Non-blocking IO)&#xff1a; 默认创建的socket都是阻塞的&#xff0c;若是要设置成非阻塞IO需要socket被设置成NONBLOCK。 IO多路复用&#xff08;IO Multiplexing&…

微软 Windows 10 22H2 发布可选更新 19045.4474,修复窗口显示问题等

微软今天面向 Windows 10 22H2 版本&#xff0c;发布了 KB5037849 非安全可选更新&#xff0c;用户安装后版本号升至 Build 19045.4474。 IT之家 5 月 30 日消息&#xff0c;微软今天面向 Windows 10 22H2 版本&#xff0c;发布了 KB5037849 非安全可选更新&#xff0c;用户安…

内部资料13000+变现资源,写作副业项目,找灵感就用它!

很多刚学在公众号&#xff0c;或是在其他自媒体平台写副业项目的朋友&#xff0c;写一段时间后会发现找不到写的内容。于是&#xff0c;每天都会为写什么而苦恼&#xff0c;找不到素材&#xff0c;没有灵感。 关注富哥资源站的朋友都知道&#xff0c;咱们的资源站已经更新了内…

2024 Jiangsu Collegiate Programming Contest E. Divide 题解 主席树

Divide 题目描述 Given an integer sequence a 1 , a 2 , … , a n a_1,a_2,\ldots,a_n a1​,a2​,…,an​ of length n n n. For an interval a l , … , a r a_l,\ldots,a_r al​,…,ar​ in this sequence, a Reduce operation divides the maximum value of the inter…

【NI国产替代】产线测试:数字万用表(DMM),功率分析仪,支持定制

数字万用表&#xff08;DMM&#xff09; • 6 位数字表显示 • 24 位分辨率 • 5S/s-250KS/s 采样率 • 电源和数字 I/O 均采用隔离抗噪技术 • 电压、电流、电阻、电感、电容的高精度测量 • 二极管/三极管测试 功率分析仪 0.8V-14V 的可调输出电压&#xff0c;最大连…

[Cloud Networking] Layer Protocol (continue)

文章目录 1. STP / RSTP / MSTP Protocol1.1 STP的作用1.2 STP 生成树算法的三个步骤1.3 STP缺点 2. ARP Protocol3. DHCP Protocol3.1 DHCP 三种分配方式3.2 DHCP 攻击 4. IPSEC / MACSEC 1. STP / RSTP / MSTP Protocol 1.1 STP的作用 消除二层环路&#xff1a;通过阻断冗余…

shell脚本基础教程

快捷目录 1、解释器2、shell脚本调用方式3、变量自定义变量环境变量特殊变量变量的默认值declare 命令readonly命令let命令 4、数据类型字符串 5、字符串操作6、数组定义数组读取数组修改数组删除数组获取数组长度 7、运算符算术运算符关系运算符布尔运算符逻辑运算符 要在[[ ]…

求极差(range)

题目描述 小红拿到了一个数组&#xff0c;其中每个元素都是素数。小红准备进行若干次以下操作&#xff1a; 选择两个素数元素&#xff0c;将他们合并&#xff0c;生成的新元素为原来两个素数的乘积。 现在小红希望操作到不能再操作为止&#xff0c;然后使得最终的极差&#…

王道408数据结构CH4_串

概述 4 串 4.1 串的实现 4.1.1 存储结构 定长顺序存储 #define Maxsize 255typedef struct{char *ch[Maxsize];int length; }SString;堆分配存储 typedef struct{char *ch;int length; }HString;块链存储 4.1.2 基本操作 4.2 模式匹配&#xff08;子串定位&#xff09; 4.2.…

Docker面试整理-Docker Swarm是什么?

Docker Swarm 是 Docker 的原生集群管理和编排工具,用于将多个 Docker 主机集合成一个虚拟的 Docker 主机。它允许你在多台机器上部署、管理和扩展容器化应用,是构建和管理容器化应用的高可用集群的一种方式。 Docker Swarm 的核心特性包括: 1. 集群管理: ● Docker Swarm…

RaspAP:轻松实现树莓派无线 AP

RaspAP 是一个可以将树莓派轻松部署成无线 AP&#xff08;Access Point&#xff09;的软件方案&#xff0c;具有一套响应式的 WebUI 来控制 WiFi&#xff0c;用起来和家用路由器一样方便。RaspAP 可以运行在 Raspbian 上&#xff0c;只需要先给树莓派安装好 Raspbian 系统&…

12寸晶圆厂建设概述

1、关键步骤 半导体12英寸&#xff08;12吋&#xff09;晶圆厂的建厂过程是一个复杂且耗时的工程&#xff0c;涉及到多个阶段&#xff0c;包括但不限于以下几个关键步骤&#xff1a; 1. **项目规划与设计**&#xff1a;首先需要进行项目的可行性研究&#xff0c;确定产品定位…

docker和docker-compose的安装

docker的安装 1.安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.设置开机自启动 systemctl start docker #启动docker systemctl enable docker3.配置阿里云镜像 不配置镜像的话&#xff0c;进行 docker pull 等操作会比较慢。进入阿里云&…

Hudi Spark Sql Procedures 回滚 Hudi 表数据

前言 因为有 Hudi Rollback 的需求,所以单独总结 Hudi Spark Sql Procedures Rollback。 版本 Hudi 0.13.0(发现有bug)、(然后升级)0.14.1Spark 3.2.3Procedures 官方文档:https://hudi.apache.org/docs/procedures 相关阅读:Hudi Spark SQL Call Procedures学习总结…

【NI国产替代】电池模拟器,快速模拟 3C 产品电池的充放电功能

电池模拟器 快速模拟 3C 产品电池的充放电功能输出灵活可调节的电压/电流内置双向 DC-DC 降压变换器为 3C 产品提供漏电检测 电池模拟器系列包含单节双通道&#xff08;1S&#xff09;、双节双通道&#xff08;2S&#xff09;、三节单通道&#xff08;3S&#xff09;三种规格&…