Linux——基础IO(上)|语言层面如何访问文件|什么是一切皆文件|C语言文件操作复习|什么是当前路径|系统接口的使用|open|close|write|read|文(下)

简介: 笔记

write

向一个fd里写特定的buf,字符个数为conut

1.png2.png3.png

修改一下再写入

4.png5.png




我们发现是从头部开始写入,而不是删除后再写


这是因为我们加的指令不够

6.png7.png8.png

追加O_APPEND

9.png


read

10.png

11.png从特定文件描述符,读取数据到buf中,读count个

12.png13.png

read返回值是实际读到的字节数


文件描述符


我们发现上面打开文件后,描述符都是3

14.png15.png

文件描述符没有0,1,2


这是因为:0,1,2,分别对应stdin,stdout,stderr


证明:

16.png17.png

我们发现往标准输出和往1里面写,照样可以打印在显示器上

18.png19.png

我们输入123456,仍然可以打印出来

20.png21.png

此时仍然可以读取


int类型 0 1 2 和FILE*类型 stdin stdout stderr都可以读取


FILE*的FILE是一个struct结构体,是C标准库提供的,内部有多种成员


C文件库函数内部一定要调用系统调用,在系统角度,系统认的是fd而不是FILE


FILE结构体里面必定封装了fd


stdin/out/err内部绝对有fd

22.png23.png

fd的理解


进程要访问文件,必须先打开文件,一个进程可以打开多个文件,一般而言 进程:打开的文件=1:N,文件要被访问,前提是加载到内存当中


如果多个进程都要打开自己的文件,系统中会存在大量被打开的文件,所以,OS需要把如此多的文件管理起来,管理方式:先描述,再组织


在内核中,OS内部要为管理每一个被打开的文件,构建struct file结构体,打开一个文件就创建struct file的对象或变量,用来充当一个被打开的文件,结构体里面包含了一个被打开的文件的几乎所有的内容(不仅仅包含属性)


如果有很多创建的struct file,会用双链表组织起来

24.png

进程和文件的对应关系,用一个数组维护类型是struct file*

25.png


fd在内核中,本质是一个数组下标,系统通过数组下标,在数组中做哈希索引,就可以找到对应的打开的文件对象


结论:


当我们使用open打开文件的时候,内核中会创建一个文件对象,然后在数组里找一个没有被使用的格子,把这个格子的地址填到右侧创建的文件对象中,然后把对应的数组下标返回给用户。用户用数组下标就能调用接口,直接根据当前进程的PCB找到数组,然后根据数组索引到文件对象,文件对象中包含了文件的所有内容,找到文件之后,就可以进行操作

26.png

相关文章
|
17天前
|
存储 缓存 Linux
Linux IO的奥秘:深入探索数据流动的魔法
Linux I/O(输入/输出)系统是其核心功能之一,负责处理数据在系统内部及与外界之间的流动。为了优化这一流程,Linux进行了一系列努力和抽象化,以提高效率、灵活性和易用性。🚀
Linux IO的奥秘:深入探索数据流动的魔法
|
30天前
|
存储 传感器 数据可视化
【软件设计师备考 专题 】IO接口的功能、类型和特性
【软件设计师备考 专题 】IO接口的功能、类型和特性
47 1
|
1月前
|
存储 监控 Linux
【Linux IO多路复用 】 Linux下select函数全解析:驾驭I-O复用的高效之道
【Linux IO多路复用 】 Linux下select函数全解析:驾驭I-O复用的高效之道
52 0
|
1月前
|
缓存 Linux API
文件IO和标准IO的区别
文件IO和标准IO的区别
22 2
|
1月前
|
Shell Linux C语言
【Shell 命令集合 网络通讯 】Linux 向指定用户或终端发送消息 write命令 使用指南
【Shell 命令集合 网络通讯 】Linux 向指定用户或终端发送消息 write命令 使用指南
34 0
|
3天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
15天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
21 0
|
12天前
|
存储 固态存储 Java
文件IO讲解
文件IO讲解
28 0
|
16天前
|
Linux 开发者
Linux文件编程(open read write close函数)
通过这些函数,开发者可以在Linux环境下进行文件的读取、写入和管理。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
85 4
|
17天前
|
存储 缓存 安全
Linux IO:打开数据之窗的魔法
Linux I/O(输入/输出)是操作系统中一个至关重要的组成部分,它涉及到数据在内存🧠、存储设备💾、网络接口🌐等之间的传输过程。在Linux中,I/O操作不仅仅是文件读写那么简单,它包括了一系列复杂的机制和策略,旨在提高数据处理的效率,保证系统的稳定性和性能。📊
Linux IO:打开数据之窗的魔法