Linux——基础IO

1. 预备知识

共识原理:

  1. 文件 = 内容 + 属性

  2. 文件分为 打开的文件 和 没打开的文件

文件要想被打开,必须先被加载到内存中。文件内容、文件属性都要加载进去,

因为CPU只和内存打交道

文件的内容加不加载,取决于是否对文件做读取修改,理想情况二者都要加载
进程 : 打开的文件 = 1 : n

  1. 对于打开的文件:它由谁打开?是进程 !所以本质上,是在研究进程和文件的关系。

  2. 没打开的文件在哪里存放?在磁盘上。

我们最关注什么问题?没有被打开的文件非常多,文件如何被分门别类地放置好,如何存储? 我们要能快速地进行增删查改,快速地找到文件

所以,在操作系统内部,一定存在大量的被打开的文件。

OS要不要管理这些被打开的文件呢?怎么管理? 先描述,再组织。

在内核中,一个被打开的文件,都必须有自己的文件打开对象,其中包含文件的很多属性。

如:struct XXX { 文件属性;struct XXX* next } ;
对文件的管理,就转换成了对链表的增删改查。

一个进程启动后,会默认打开三个输入、输出流,三个输入输出流,最终是以文件的形式打开的。
对应到C语言中,一个程序会打开stdin、stdout、stderr 三个流成员,类型是FlLE*。
Linux下一切皆文件,所以一个进程默认就打开了三个文件。

相关推荐
用户805533698031 天前
Input 子系统架构:Core、Handler、Driver 三层是怎么协作的
linux·嵌入式
用户805533698031 天前
RK-Forge外设系列开篇 - 把板子从「能启动」变成「能用」:Ethernet/SPI/MMC 三个纯接线外设
linux·github·嵌入式
七歌杜金房2 天前
我终于又有了自己的 Linux 电脑
linux·debian·mac
tntxia3 天前
linux curl命令详解_curl详解
linux
扛枪的书生3 天前
Linux 网络管理器用法速查
linux
顺风尿一寸3 天前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode3 天前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫3 天前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao5 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐6 天前
Linux内存扩容指南
linux