LinuxC编程——文件IO

news2024/11/24 20:56:53

目录

    • 一、概念⭐⭐
    • 二、特点⭐⭐⭐
    • 三、函数⭐⭐⭐⭐
      • 3.1 打开文件 open
      • 3.2 关闭文件 close
      • 3.3 读写操作
      • 3.4 定位操作 lseek
    • 四、文件IO与标准IO的对比
    • 脑图

在C语言的标准IO库中的库函数,如fclose、fopen,、fread、fwrite,提供的是高层服务;而Linux的文件I/O调用提供的是底层的服务,底层的服务不提供缓冲而直接进入操作系统。标准I/O库中的高层服务归根到底还是要调用Linux所提供的底层服务。

一、概念⭐⭐

  • 系统中定义的一组用于输入输出的函数接口(注意和标准IO概念上的区别🚨👉标准IO是在C库中定义的一组用于输入输出的函数接口)

二、特点⭐⭐⭐

  • 1)没有缓冲机制,每次调用都会引起系统调用
  • 2)围绕文件描述符进行操作,文件描述符是非负整数(>=0)依次分配
  • 3)默认打开三个文件描述符0(标准输入),1(标准输出),2(标准错误)
  • 4)可以操作任意类型文件,目录文件除外

三、函数⭐⭐⭐⭐

3.1 打开文件 open

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

  • 功能:打开文件

  • 参数:

    • pathname:文件名或包含路径的文件名

    • flags:打开文件的方式

      • O_RDONLY:只读
      • O_WRONLY:只写
      • O_RDWR:可读可写
      • O_CREAT:创建
      • O_TRUNC:清空
      • O_APPEND:追加
  • 返回值

    • 成功:文件描述符
    • 失败:-1
  • 当第二个参数中有O_CREAT选项时,需要给open函数传递第三个参数,指定创建文件的权限

  • *int open(const char pathname, int flags, mode_t mode);
    创建出来的文件权限为指定权限值&(~umask) //umask为文件权限掩码

  • 标准IO文件打开权限与
    文件IO文件打开权限对比

    • pC9TAMR.png

3.2 关闭文件 close

  • int close(int fd);

  • 功能:关闭文件

  • 参数:fd:文件描述符

  • 返回值:

    • 成功:0
    • 失败:-1

3.3 读写操作

  • read

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

    • 功能:从一个已打开的可读文件中读取数据

    • 参数

      • fd 文件描述符
      • buf 输入缓冲区指针
      • count 要读入的字节数
    • 返回值

      • 成功:实际读到的字节数
      • 返回0:表示读到文件结尾
      • 返回-1:表示出错,并设置errno号
  • write

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

    • 功能:向指定文件描述符中,写入 count个字节的数据。

    • 参数

      • fd 文件描述符
      • buf 要写的内容
      • count 要写入的字节数
    • 返回值

      • 成功:实际写入的字节数
      • 失败 : -1
      • 没有数据要写:0
    • pC9TEs1.md.png
  • 练习:实现Linux下的cp命令

    • pC9TeZ6.png

3.4 定位操作 lseek

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

  • 功能:设定文件的偏移位置

  • 参数

    • fd:文件描述符

    • offset偏移量

      • 正数:向文件结尾位置移动
      • 负数:向文件开始位置
    • whence 相对位置

      • SEEK_SET 开始位置
      • SEEK_CUR 当前位置
      • SEEK_END 结尾位置
  • 返回值

    • 成功:文件的当前位置
    • 失败:-1

四、文件IO与标准IO的对比

pC9TgoT.png

脑图

在这里插入图片描述

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

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

相关文章

数据在内存中的存储(超详细讲解)

目录 浮点数家族 浮点数类型在内存中的存储 一.为什么说整型和浮点数在内存中存储方式不同(证明) 二.浮点数的存储规则 浮点数在计算机内部的表示方法 1.对于M的存储和取出规则 2.对于E的存储和取出时的规则 对前面代码结果进行解释: …

Kubernetes_APIServer_证书_03_四个静态Pod Yaml文件解析

文章目录 前言一、APIServer Yaml文件解析APIServer证书文件APIServer三种探针启动探针可读性探针生存性探针 APIServer其他参数APIServer其他配置项 二、Scheduler Yaml文件解析Scheduler证书配置Scheduler两个探针启动探针生存性探针 Scheduler其他参数Scheduler其他配置项 三…

测试各种变量是否是线程安全的

前提条件,把这个类设成是单例模式,也就是说,这个类只能创建一个对象,然后多个线程在一个对象中去争抢资源. 1.int类型的成员变量number, (private int number) 线程共享 public class Stu {private int number;private String age;private String math;private i…

【sentinel】漏桶算法在Sentinel中的应用

漏桶算法 漏桶算法介绍 漏桶算法,又称leaky bucket。 从图中我们可以看到,整个算法其实十分简单。首先,我们有一个固定容量的桶,有水流进来,也有水流出去。对于流进来的水来说,我们无法预计一共有多少水…

内存池技术

为了学习池化技术以及后续自行实现一个仿tcmalloc的线程池,我们先浅浅的学习一下池化的概念,以及简单的实现一个定长的内存池。 文章目录 一:池化技术二:内存池三:内存池主要解决的问题四:malloc五&#x…

原地顺时针旋转矩阵(leetcode 48.选择图像)

本题目在leetcode上有原题48. 旋转图像 详细讲解 顺时针旋转90,横变竖,竖变横。按圈分解,一圈圈的单独转,由外圈到内圈,不断分解。 每一圈转到位了,整个矩阵就旋转好了。 那么,问题来了&…

Photoshop史上最强更新,动动手指就能让AI替你修图

Photoshop 在最新的 Beta 版本中,融入了 Firely 智能 AI 创意填充功能,只要对图片进行简单地框选,就能实现生成对象、生成背景、扩展图像、移除对象以及更多创意功能,支持用自然语言输入指令,让 AI 替你完成创意填充。…

Jmeter常用的两大性能测试场景你都知道吗?

目录 一、阶梯式场景 二、波浪式场景 一、阶梯式场景 该场景主要应用在负载测试里面,通过设定一定的并发线程数,给定加压规则,遵循“缓起步,快结束”的原则,不断地增加并发用户来找到系统的性能瓶颈,进而有…

SpringCloud:分布式缓存之Redis分片集群

1.搭建分片集群 主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决: 海量数据存储问题 高并发写的问题 使用分片集群可以解决上述问题,如图: 分片集群特征: 集群中有多个master,每个master保存不同数据 …

管道通信详解

目录 一、进程通信原理 二、什么是管道 三、创建一个匿名管道 四、fork共享管道的原理 五、管道的特点 六、4中场景 七、命名管道 八、命名管道通信的原理 九、创建一个命名管道 十、上实例 一、进程通信原理 我们知道进程间相互独立,具有独立性。那么我们…

编译原理 SLR(1) 语法分析器的构建

编译原理 SLR(1) 语法分析器的构建 在我的博客查看:https://chenhaotian.top/study/compilation-principle-slr1/ 实验三 自底向上语法分析器的构建 项目代码:https://github.com/chen2438/zstu-study/tree/main/%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%8…

冈萨雷斯DIP第10章知识点

文章目录 10.2 点、线和边缘检测10.2.2 孤立点的检测10.2.3 线检测10.2.4 边缘模型 10.3 阈值处理10.3.4 使用图像平滑改进全局阈值处理10.3.5 使用边缘改进全局阈值处理10.4 使用区域生长、区域分离与聚合进行分割 分割依据的灰度值基本性质是:不连续性和相似性。本…

计算机网络第二章——物理层(下)

提示:君子可内敛不可懦弱,面不公可起而论之 文章目录 2.1.7 数据交换方式为什么要进行数据交换数据交换的方式电路交换电路交换的优缺点报文交换报文交换的优缺分组交换分组交换的优缺点数据交换方式的选择数据报方式虚电路方式虚电路方式的特点数据报VS…

HJ29 字符串加解密

描述 对输入的字符串进行加解密,并输出。 加密方法为: 当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a; 当内容是数字时则把该数字加1&#xff0c…

深入理解设计原则之依赖反转原则(DIP)【软件架构设计】

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 深入理解设计模式系列 高级C并发线程编程 DIP:依赖反转原则 系列文章目录1、依赖反转原则的定义和解读2、稳定的抽象层3、依赖倒置原则和控制反转、依赖注入的联系小结 1、依赖反转原则的定义和解读 …

多线程事务回滚方法

多线程事务回滚方法 介绍案例演示线程池配置异常类实体类控制层业务层mapper工具类验证 解决方案使用sqlSession控制手动提交事务SqlSessionTemplate注入容器中改造业务层验证成功操作示例业务层改造 介绍 1.最近有一个大数据量插入的操作入库的业务场景,需要先做一…

Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching 论文精读

Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching 论文链接:[2305.13310] Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching (arxiv.org) 代码链接:aim-uofa/Matcher: Matcher: Segment Anyt…

STM32 HAL库开发——基础篇

目录 一、基础知识 1.1 Cortex--M系列介绍 1.2 什么是stm32 1.3 数据手册查看 1.4 最小系统和 IO 分配 1.4.1 电源电路 1.4.2 复位电路 1.4.3 BOOT 启动电路 1.4.4 晶振电路 1.4.5 下载调试电路 1.4.6 串口一键下载电路 1.4.7 IO 分配 1.4.8 总结 1.5 开发工…

Spring:Spring框架中的核心类 ③

一、解读思想 1、用轮廓解读体系。 2、关注细节,不执着细节。 二、核心类设计 1、 容器接口和实现类 ApplicationContext 接口(容器) ①.读取配置文件 ②.注解形成bean 哪种形式的bean统一核心管理使用中心类。 2、 ApplicationCont…

MySQL 子查询

文章目录 子查询单行子查询多行子查询相关子查询 exists 子查询 所谓子查询就是 select 查询语句中还有 select 查询语句,里面的称为子查询或内查询,外面的称为主查询或外查询。 根据查询结果记录数量,子查询可以分为两类: 单行…