文件I/O基础-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

文件I/O基础

在这里插入图片描述
本章将介绍Linux应用编程中最基础的知识,即文件I/O(Input/Output)。文件I/O指的是对文件进行读写操作,在Linux系统中一切皆文件,这是Linux系统设计的核心理念,因此文件I/O操作既是基础又是最重要的部分。本章将讨论以下主题:

文件描述符的概念
打开文件(open())和关闭文件(close())
写文件(write())和读文件(read())
文件读写位置偏移量

1、概念

文件 I/O(input/output) 指的是对文

件的输入/输出操作,即对文件的读写操作

流程

  • 打开文件

  • 读写文件

  • 关闭文件

文件描述符

  • 概念

    • 在 open函数执行成功的情况下,会返回一个非负整数,该返回值就是一个文件描述符(file descriptor)

      • 文件句柄

      • 一个非负整数

      • 与对应文件相绑定

        • 所有打开的文件都会通过文件描述符进行索引
  • 分配

    • 分配一个最小的没有被使用的整数作为文件描述符

      • 文件描述符一般都是从 3 开始

        • 0、1、2 这三个文件描述符已经默认被系统占用
          了,分别分配给了系统标准输入(0)、标准输出(1)以及标准错误(2)

Linux 系统下,一切皆文件

2、打开文件:open()函数

原型

  • #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>

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

    • 用于打开文件
  • int open(const char *pathname, int flags, mode_t mode);

    • 用于创建文件

参数

  • pathname

    • 标识需要打开或创建的文件,可以包含路径(绝对路径或相对路径)信息
  • flags

    • 文件访问模式标志以及其它文件相关标志

    • 既可以单独使用某一个标志,也可以通过位或运算(|)

    • 不同内核版本所支持的 flags 标志是存在差别的

  • mode

    • 指定新建文件的访问权限

    • 只有当 flags 参数中包含 O_CREAT 或O_TMPFILE 标志时才有效(O_TMPFILE 标志用于创建一个临时文件)

    • 通过 chmod 命令对文件权限进行修改

    • 使用"ls -l"命令来查看到文件所对应的权限

    • u32 无符号整形数据

      • O—这 3 个 bit 位用于表示其他用户的权限

      • G—这 3 个 bit 位用于表示同组用户(group)的权限,即与文件所有者有相同组 ID 的所有用户

      • U—这 3 个 bit 位用于表示文件所属用户的权限,即文件或目录的所属者

      • S—这 3 个 bit 位用于表示文件的特殊权限

返回值

  • 成功将返回文件描述符,文件描述符是一个非负整数;失败将返回-1

3、写文件:write()函数

原型

  • #include <unistd.h>

  • ssize_t write(int fd, const void *buf, size_t count);

参数

  • fd

    • 文件描述符,指定目标文件
  • buf

    • 指定写入数据对应的缓冲区,即存放要写入的数据
  • count

    • 指定写入的字节数

返回值

  • 如果成功将返回写入的字节数(0 表示未写入任何字节)

  • 如果此数字小于 count 参数,这不是错误,譬如磁盘空间已满,可能会发生这种情况

  • 如果写入出错,则返回-1

4、读文件:read()函数

原型

  • #include <unistd.h>

  • ssize_t read(int fd, void *buf, size_t count);

参数

  • fd

    • 文件描述符,指定目标文件
  • buf

    • 指定用于存储读取数据的缓冲区
  • count

    • 指定需要读取的字节数

返回值

  • 成功读取后返回实际读取的字节数。

  • 实际读取的字节数可能小于 count 参数指定的字节数。可能情况包括:

    • 当前文件位置偏移量已经到了文件末尾,此时 read 函数返回成功但实际读取字节数为 0。

    • 当要求读取的字节数大于文件剩余的字节数时,read 函数只能返回文件剩余字节数,而不会读取更多。

    • 举例:如果文件在末尾之前只有 30 个字节数据,而要求读取 100 个字节,则 read 函数成功调用时只能返回 30;而下一次再调用 read 读取时,则会返回 0(表示已到达文件末尾)。

  • 如果写入出错,则返回-1

5、关闭文件:close()函数

原型

  • #include <unistd.h>

  • int close(int fd);

参数

  • fd

    • 文件描述符,需要关闭的文件所对应的文件描述符

返回值

  • 如果成功返回 0

  • 如果失败则返回-1

6、调整读写位置偏移:lseek()函数

原型

  • #include <sys/types.h>
    #include <unistd.h>

  • off_t lseek(int fd, off_t offset, int whence);

参数

  • fd

    • 文件描述符,目标文件
  • offset

    • 偏移量,以字节为单位
  • whence

    • 用于定义参数 offset 偏移量对应的参考值,该参数为下列其中一种(宏定义):

      • SEEK_SET

        • 读写偏移量将指向 offset 字节位置处(从文件头部开始算)
      • SEEK_CUR

        • 读写偏移量将指向当前位置偏移量 + offset 字节位置处,offset 可以为正、也可以为负
      • SEEK_END

        • 读写偏移量将指向文件末尾 + offset 字节位置处,同样 offset 可以为正、也可以为负

返回值

  • 成功将返回从文件头部开始算起的位置偏移量(字节为单位)

  • 错误将返回-1

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

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

相关文章

【软件下载】Folx详细安装教程视频-Folx软件最新版下载

根据大数据调查表明Acceleration PRO下载&#xff1a;抽出多达10个流的故障能够显着提高下载速度。根据行业数据显示与iTunes PRO集成&#xff1a;通过将Folx集成到iTunes来下载歌曲和视频&#xff0c;能够在下载后立即自动添加到iTunes库。实际上我们可以这样讲通过代理下载&a…

udp udpClient 聊天室

简介 1、UDP&#xff08;User Data Protocol&#xff0c;用户数据报协议&#xff09; &#xff08;1&#xff09; UDP是一个非连接的协议&#xff0c;传输数据之前源端和终端不建立连接&#xff0c;当它想传送时就简单地去抓取来自应用程序的数据&#xff0c;并尽可能快地把它…

Vue38 安装脚手架 vue-cli ,并使用脚手架创建项目

安装脚手架 vue-cli &#xff0c;并使用脚手架创建项目 第一步 安装脚手架 npm config set registry https:\\[registry.npmmirror.com // 切换淘宝镜像 npm install -g vue/cli第二步 切换到创建项目的目录&#xff0c;创建项目 cd XXX vue create XXX第三步 启动项目 npm…

化茧成蝶 | 继HuggingFace首家落地大模型具身智能场景

关于具身智能的起源 近年来&#xff0c;大语言模型&#xff08;LLMs&#xff09;的兴起给机器人领域带来了革命性的改变&#xff0c;大模型赋予了传统机器人理解和推理的能力&#xff0c;让具身智能这一概念再度出现在大众的视角中。OpenCSG 作为国内 AI 开源社区的先锋&#…

[AI MoneyPrinterTurbo] 一键成片,超级印钞机

今天&#xff0c;我们将踏上一段关于MoneyPrinterTurbo的探索之旅&#xff0c;这是一个文生视频工具&#xff0c;旨在让视频创作变得轻松而有趣。 故事的开始 想象一下&#xff0c;你只需要提供一个视频主题或关键词&#xff0c;剩下的——视频文案、素材、字幕、背景音乐&am…

openCV3.0 C++ 学习笔记补充(自用 代码+注释)---持续更新 二(51-)

环境&#xff1a;OpenCV3.2.0 VS2015 51、Mean-Shift算法分割图像 cv::pyrMeanShiftFiltering() 参考链接&#xff1a;【从零学习OpenCV 4】分割图像——Mean-Shift分割算法 Mean-Shift算法又被称为均值漂移法&#xff0c;是一种基于颜色空间分布(彩色图像的像素值)的图像分割…

pycharm鼠标变成小方块

异常图片&#xff1a; 异常原因&#xff1a;误动了键盘insert键 解决方法&#xff1a;Fninsert

根据配置生成一个合并单元格的table表格的html代码

​分享最近工作中遇到的一个场景&#xff1a;导出表格&#xff0c;需要准备好表格的html代码&#xff0c;此表格支持最上面的表头合并且居中展示表格标题&#xff0c;如果上下行数据有相同的&#xff0c;则要上下合并单元格 封装了一个如下的方法 const configToTable (conf…

国家自然科学基金标书大全(2002-2024)

数据来源&#xff1a;在20世纪80年代初&#xff0c;为了促进中国的科技体制革新并改革科研资金分配机制&#xff0c;中国科学院的89位院士联名向党和国家领导人提出建议&#xff0c;设立了国家自然科学基金的设立。国自然基金自创立以来&#xff0c;根据国家发展科学技术方针、…

dataguard 主备切换方式switchover 和 failover 操作步骤

作者介绍&#xff1a;老苏&#xff0c;10余年DBA工作运维经验&#xff0c;擅长Oracle、MySQL、PG数据库运维&#xff08;如安装迁移&#xff0c;性能优化、故障应急处理等&#xff09; 公众号&#xff1a;老苏畅谈运维 欢迎关注本人公众号&#xff0c;更多精彩与您分享。datagu…

SpringBoot整合拦截器和日期转换器

一、SpringBoot整合拦截器 1.添加拦截器 package com.by.interceptor;import com.by.pojo.User; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import java…

【ARM】内存属性Memory Attributes (MemAttr)

目录 1. EWA 2. Device 3. Cacheable 4. Allocate 5. 内存属性的传播 6. 事务属性组合 7. Memory Type 内存属性Memory Attributes (MemAttr) 包含Early Write Acknowledgment (EWA), Device, Cacheable, 以及Allocate。 1. EWA EWA&#xff0c;Early Write Acknowledg…

AI自动生成角色和情节连续的漫画,中山大学联想提出AutoStudio,可以多轮交互式连续生成并保持主题一致性。

中山大学和联想研究院提出AutoStudio: 是一种无需训练的多代理框架&#xff0c;用于多轮交互式图像生成&#xff0c;能够在生成多样化图像的同时保持主体一致性。 AutoStudio 采用三个基于 LLM 的智能体来解释人类意图并为 SD 模型生成适当的布局指导。此外&#xff0c;还引入…

让AI保持怪异

让AI保持怪异 Anthropic的创意技术专家和员工设计师凯尔图尔曼(Kyle Turman)分享了一种深深引起共鸣的观点。他说(转述原话):“人工智能实际上真的很奇怪&#xff0c;我认为人们对这一点的认识还不够。”这引发了我向小组提出的问题:我们是否有消毒人工智能固有的陌生感的风险?…

python-序列相关

序列&#xff08;squence&#xff09;是一组按顺序、紧密排列在一起的数据集。序列的作用是便于管理、方便数据操作更重要的是序列支持切片操作。 序列主要包括&#xff1a;列表、元组、字符串和字节串 内置数据结构&#xff1a; 容器&#xff1a;列表、元组、字典、集合 结构…

Chromium 调试指南2024 Mac篇 - 准备工作 (一)

1.引言 Chromium是一个由Google主导开发的开源浏览器项目&#xff0c;它为Google Chrome浏览器提供了基础框架。Chromium不仅是研究和开发现代浏览器技术的重要平台&#xff0c;还为众多其他基于Chromium的浏览器&#xff08;如Microsoft Edge、Brave等&#xff09;提供了基础…

atcoder abc 359

A count takahashi 问题: 思路&#xff1a;字符串比较 代码&#xff1a; #include <bits/stdc.h>using namespace std;int main() {int n;cin >> n;int ans 0;for(int i 1; i < n; i ) {string s;cin >> s;if(s[0] T) ans ;}cout << ans;re…

Android 多媒体开发——Media3与MediaSession最全使用指南

一、Media3库简介 1.1 Media3是什么&#xff1f; 官方释义&#xff1a; Jetpack Media3 is the new home for media libraries that enables Android apps to display rich audio and visual experiences. Media3 offers a simple architecture with powerful customization,…

软考出成绩了,速查,查分方式看这里

各位考生&#xff0c;软考出成绩啦&#xff01;大家赶紧查一下&#xff0c;各科都45分就是通过&#xff01; 软考成绩查询入口已开通&#xff0c;此刻你是不是既激动又忐忑&#xff1f;速查&#xff01; ★ 查询网站 中国计算机技术职业资格网https://bm.ruankao.org.cn/sign/…

如何轻松获取 GitLab 指定分支特定路径下的文件夹内容

第一步&#xff1a; 获取 accessToken 及你的 项目 id &#xff1a; 获取 accessToken ,点击用户头像进入setting 按图示操作&#xff0c;第 3 步 填写你发起请求的域名。 获取项目 id , 简单粗暴方案 进入 你项目仓库页面后 直接 源码搜索 project_id&#xff0c; value 就…