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. Nginx--安装&&配置文件

    官网:http://nginx.org/en/download.html nginx版本:1.18   一 安装 1 下载预编译环境(预编译报错需要安装什么库 直接在库名后面接 -devel 使用yu ...

  2. VMware15.5安装Ubuntu20.04

    一.安装前的准备 1.下载好Ubuntu20.04的镜像文件,直接从官网下载就好,激活密匙. 2.准备好VMware软件,这里就忽略安装过程了. 二.建立虚拟机以及开启正式的Ubuntu安装过程 参考 ...

  3. 2019年第十届蓝桥杯国赛C++B组

    部分题目示意图来自网络,所以会带水印 最后编辑时间: 2021年5月12日 统一声明 如果不写默认带有常用头文件 如果不表明主函数默认表示在 void solve(){} 默认使用 using nam ...

  4. Educational Codeforces Round 6 620E. New Year Tree(DFS序+线段树)

    题目链接:点击打开链接 题意:给你一棵树,编号1~n,告诉你根结点是1. 每次有两个操作: 1,将以v为根的子树的结点全部染成颜色c 2,问以v为根的紫书的结点的颜色种类. 思路:如果这是一条线段的话 ...

  5. element-ui实现部分引用

    1.首先安装 babel-plugin-component组件: 2.修改babel.js配置 1 module.exports = { 2 presets: [ 3 '@vue/app', 4 [' ...

  6. vue配置proxy实现跨域

  7. [VS工程技巧]远程调试工具及dump文件来检查程序崩溃及异常等问题

    做什么 之前有一次梦中所得,既然可以让vs附加到进程去调试活动的dll,那要是可以让我本地的电脑去调试别人客户端或者测试环境的DLL就好了,这样就可以不通过dbgview去一个个输出看,而是可以直接调 ...

  8. 扒一扒迅雷11新功能——6T云盘功能、极致传输、高清播放、跨端同步

    云盘功能 极致传输 高清播放 跨端同步

  9. java项目实战-tomcat-SpringMVC-基本用法01-day25

    目录 1. maven创建 war项目 2. SpringMVC 1. maven创建 war项目 什么是jar项目 什么是war项目? jar项目: 由main方法来开始的 直接依赖JVM就能编译运 ...

  10. feign接口自动生成工具

    最近发现开发spring cloud时,编写feign接口是一件痛苦的事,不仅要编写feign接口,还有fallback.请求参数和返回值等,大量重复工作,很浪费时间. 于是便想到可以编写工具自动生成 ...