Linux文件IO之一 [补档-2023-07-21]
Linux文件IO
8-1C标准库IO函数的工作流程
使用fopen函数打开一个文件,之后会返回一个FILE* fp指针,fp指针指向一个结构体,这个结构体是c 标准io库中的一个结构体,这个结构体有三个重要的成员:
文件描述符:描述符指向一个打开文件表,通过此表可以找到文件的inode表,通过对应的inode可以找到 对应的文件数据块。
文件指针:读和写共享一个文件指针,并且读写过程中可以引起文件指针的变化。
文件缓冲区:在进行读写操作时,会先通过文件缓冲区,因为这样可以减少对磁盘的读写次数,等输入完再 真正地写入文件,提高读写磁盘的效率。
8-2标准库函数与系统函数之间的关系
系统中内置了读写函数,并且提供了相应的api,我们只需调用标准库函数,标准库函数会帮我们调用系 统自带的api。
8-3虚拟地址空间
Linux会为每一个进程分配0到4g的独立内存,这个内存与其他的内存相隔开,相互之间不干扰。这块内 存上有着各种内存区域。
进程的虚拟空间分为内核区(系统维护,用户没有权限对其操作) 和 用户区(这个可以进行操作)。
内核区有着进程管理,内存管理等待其中进程管理中有PCB这么一个区域,以后再介绍他。
用户区的内容:
环境变量:不多说
命令行参数: 不多说
栈空间: 不多说,像局部变量或者递归会用到
共享库:c标准库,系统的库在这里存放着
堆空间:不多说
.bss未初始化全局变量 只读区域
.data已初始化全局变量 只读区域
.text代码段,二进制指令 只读区域
(0到4k)受保护的地址 只读区域
8-4pcb,文件描述符,文件描述符表,打开文件表与inode
pcb,文件描述符和文件描述表
在虚拟地址空间的3-4G的这段空间中,有一个进程控制块,叫做PCB。它维护着一张文件描述符表。(一 个0~1023的数组)
在linux中,所有打开的文件都有一个文件描述符,我们可以通过文件描述符对文件进行读写和访问。文 件描述符表中可以存储1021个文件描述符,其实可以存1024个,只不过前三个元素是固定的。
STDIN_FILENO 标准输入,在下标为0的文件描述符表中
STDOUT_FILENO 标准输出,在下标为1的文件描述符表中
STDERR_FILENO 标准错误,在下标为2的文件描述符表中
每当打开一个文件时,系统就会自动分配最小未使用的文件描述符给打开的文件。我们可以调用系统的 open函数来得到一个文件描述符。
打开文件表:
计算机中所有的进程都共享着一个打开文件表,打开文件表可能是数组,链表,哈希表等数据结构。每个 进程可以通过各自的文件描述符来访问打开文件表。打开文件表中有以下主要内容:
当前文件偏移量(调用read()和write()时更新,或使用lseek()直接修改)
打开文件时所使用的状态标识(即,open()的flags参数)
文件访问模式(如调用open()时所设置的只读模式、只写模式或读写模式)
与信号驱动相关的设置
对该文件i-node对象的引用
文件类型(例如:常规文件、套接字或FIFO)和访问权限
一个指针,指向该文件所持有的锁列表
文件的各种属性,包括文件大小以及与不同类型操作相关的时间戳
indoe:
inode是文件系统中的数据结构,用于存储文件的元数据,如文件大小、权限、所有者等。每个文件都有 一个唯一的inode。打开文件表项中的指针指向对应文件的inode。
linux访问一个文件的具体步骤:
当一个进程需要访问一个文件时,它会首先从自己的PCB中获取文件描述符表的指针。然后,通过文件描 述符表找到对应的文件描述符,该文件描述符指向进程的打开文件表中的一个项。该项中又包含了指向对应文 件的inode的指针。
Linux文件IO之一 [补档-2023-07-21]的更多相关文章
- 转:Linux 文件IO理解
源地址http://blog.csdn.net/lonelyrains/article/details/6604851 linux文件IO操作有两套大类的操作方式:不带缓存的文件IO操作,带缓存的文件 ...
- 转 漫谈linux文件IO
在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...
- 漫谈linux文件IO
在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...
- linux 文件IO
1.文件描述符 (1)文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指针,再间接访问得到这个文件对应的文件表.(2)文 ...
- <摘录>linux文件IO
这篇文章写的比较全面,也浅显易懂,备份下.转载自:http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的 ...
- 2.Linux文件IO编程
2.1Linux文件IO概述 2.1.0POSIX规范 POSIX:(Portable Operating System Interface)可移植操作系统接口规范. 由IEEE制定,是为了提高UNI ...
- linux文件io与标准io
文件IO实际是API,Linux对文件操作主要流程为:打开(open),操作(write.read.lseek),关闭(close). 1.打开文件函数open(): 涉及的头文件: #includ ...
- Linux文件IO操作
来源:微信公众号「编程学习基地」 目录 文件操作 Linux文件类型 Linux文件权限 修改文件权限 Linux error 获取系统调用时的错误描述 打印错误信息 系统IO函数 open/clos ...
- 嵌入式Linux—文件IO
文件IO 在 Linux 系统中,一切都是" 文件":普通文件.驱动程序.网络通信等等.所有的操作,都是通过"文件 IO"来进行的.所以,很有必要掌握文件操作的 ...
- linux文件IO操作篇 (一) 非缓冲文件
文件IO操作分为 2 种 非缓冲文件IO 和 缓冲文件IO 它们的接口区别是 非缓冲 open() close() read() write() 缓冲 fopen() fclose() fread() ...
随机推荐
- ASP.NET Web API Demo OwinSelfHost 自宿主 Swagger Swashbuckle 在线文档
新建Web API工程 选Empty,勾选Web API,不要选择Web API,那样会把MVC勾上,这里不需要MVC Web API工程属性 XML文件用于生成在线文档 新建Windows服务作为W ...
- 2016年第七届 蓝桥杯C组 C/C++决赛题解
蓝桥杯历年国赛真题汇总:Here 1.平方末尾 能够表示为某个整数的平方的数字称为"平方数" 比如,25,64 虽然无法立即说出某个数是平方数,但经常可以断定某个数不是平方数. 因 ...
- Codeforces Round #706 Editorial
1496A. Split it! 类回文判断,只要 k = 0 或者 \(s[1,k] 和 s[n - k + 1,n]\)是回文即可 特判情况 n < 2 * k + 1 为 NO int m ...
- 2021 VDC :vivo 互联网服务亿级用户的技术架构演进之路
关注公众号[vivo互联网技术]--回复[2021VDC]获取大会PPT. 2021年12月16日,vivo 开发者大会圆满落幕.在互联网技术专场中,来自vivo 互联网技术的6位研发专家,从基础架构 ...
- 小程序-轮播图swiper
- uni-app点赞效果
- Vue第一篇 ES6的常用语法
01-变量的定义 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Redis 集群模式搭建
本文为博主原创,未经允许不得转载: 目录: 1. 哨兵模式与集群模式对比 2. Redis 集群架构搭建 3. 集群原理分析 4. 集群元数据维护方式对比 5. redis 分布式寻址 6. 集群选举 ...
- wireshark 报文颜色
在使用wireshark抓包分析的过程中,默认会对不同的包进行着色,截图如下: 对不同的颜色有了解,可快速的过滤包或分析请求. 菜单栏选择视图-->着色规则,即可看到不同颜色代表的含义: 大致可 ...
- 浏览器兼容 : IE 5 到 IE 9
<!--[if IE]> <link href="ie.css" rel="stylesheet"> <![endif]--> ...