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]的更多相关文章

  1. 转:Linux 文件IO理解

    源地址http://blog.csdn.net/lonelyrains/article/details/6604851 linux文件IO操作有两套大类的操作方式:不带缓存的文件IO操作,带缓存的文件 ...

  2. 转 漫谈linux文件IO

    在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...

  3. 漫谈linux文件IO

    在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...

  4. linux 文件IO

    1.文件描述符 (1)文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指针,再间接访问得到这个文件对应的文件表.(2)文 ...

  5. <摘录>linux文件IO

    这篇文章写的比较全面,也浅显易懂,备份下.转载自:http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的 ...

  6. 2.Linux文件IO编程

    2.1Linux文件IO概述 2.1.0POSIX规范 POSIX:(Portable Operating System Interface)可移植操作系统接口规范. 由IEEE制定,是为了提高UNI ...

  7. linux文件io与标准io

    文件IO实际是API,Linux对文件操作主要流程为:打开(open),操作(write.read.lseek),关闭(close). 1.打开文件函数open(): 涉及的头文件:  #includ ...

  8. Linux文件IO操作

    来源:微信公众号「编程学习基地」 目录 文件操作 Linux文件类型 Linux文件权限 修改文件权限 Linux error 获取系统调用时的错误描述 打印错误信息 系统IO函数 open/clos ...

  9. 嵌入式Linux—文件IO

    文件IO 在 Linux 系统中,一切都是" 文件":普通文件.驱动程序.网络通信等等.所有的操作,都是通过"文件 IO"来进行的.所以,很有必要掌握文件操作的 ...

  10. linux文件IO操作篇 (一) 非缓冲文件

    文件IO操作分为 2 种 非缓冲文件IO 和 缓冲文件IO 它们的接口区别是 非缓冲 open() close() read() write() 缓冲 fopen() fclose() fread() ...

随机推荐

  1. ASP.NET Web API Demo OwinSelfHost 自宿主 Swagger Swashbuckle 在线文档

    新建Web API工程 选Empty,勾选Web API,不要选择Web API,那样会把MVC勾上,这里不需要MVC Web API工程属性 XML文件用于生成在线文档 新建Windows服务作为W ...

  2. 2016年第七届 蓝桥杯C组 C/C++决赛题解

    蓝桥杯历年国赛真题汇总:Here 1.平方末尾 能够表示为某个整数的平方的数字称为"平方数" 比如,25,64 虽然无法立即说出某个数是平方数,但经常可以断定某个数不是平方数. 因 ...

  3. Codeforces Round #706 Editorial

    1496A. Split it! 类回文判断,只要 k = 0 或者 \(s[1,k] 和 s[n - k + 1,n]\)是回文即可 特判情况 n < 2 * k + 1 为 NO int m ...

  4. 2021 VDC :vivo 互联网服务亿级用户的技术架构演进之路

    关注公众号[vivo互联网技术]--回复[2021VDC]获取大会PPT. 2021年12月16日,vivo 开发者大会圆满落幕.在互联网技术专场中,来自vivo 互联网技术的6位研发专家,从基础架构 ...

  5. 小程序-轮播图swiper

  6. uni-app点赞效果

  7. Vue第一篇 ES6的常用语法

    01-变量的定义 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  8. Redis 集群模式搭建

    本文为博主原创,未经允许不得转载: 目录: 1. 哨兵模式与集群模式对比 2. Redis 集群架构搭建 3. 集群原理分析 4. 集群元数据维护方式对比 5. redis 分布式寻址 6. 集群选举 ...

  9. wireshark 报文颜色

    在使用wireshark抓包分析的过程中,默认会对不同的包进行着色,截图如下: 对不同的颜色有了解,可快速的过滤包或分析请求. 菜单栏选择视图-->着色规则,即可看到不同颜色代表的含义: 大致可 ...

  10. 浏览器兼容 : IE 5 到 IE 9

    <!--[if IE]> <link href="ie.css" rel="stylesheet"> <![endif]--> ...