zoukankan      html  css  js  c++  java
  • APUE学习笔记——3.10文件共享

    基本概念

    内核使用3个数据结构描述一个打开的文件进程表、文件表、V节点表
    首先了解3种数据结构的概念
        1 进程表
            每一个进程有一个进程表。进程表里是一组打开的文件描述符,如标准输入0,标准输出1,标准错误2...
        2 文件表
            进程打开一个文件时,内核就为该文件创建一个文件表。
            进程表对文件表一般是 一对多的关系    文件表对文件描述符也是一对多的关系(可能多个文件描述符指向同一文件表)
    (这里解释下为什么进程表和文件表一对多的关系只是一般情况下,有什么特殊情况呢?  当父进程fork一个子进程时,复制了它的进程表,导致多个进程表对一个文件表)
             文件表中包含了文件状态标志、当前偏移量、和V-node pointer表项
                文件状态标志如:read,  write,  append,  sync, nonblocking等等
                偏移量好理解,就不多解释了(它在write时会变化)
                V-node pointer就是指向V-node表的指针
            
        3 V节点表(Linux只有i节点表)
            每一个没打开的文件有一个V节点表。V-node table实际上跟进程关系不大,主要跟被打开的文件相关。一个打开的文件只有一个v-node表,所有打开它的进程共用此表
            文件表对V节点表示多对一的关系。
            V-node表主要是描述了文件信息、数据的访问入口

    一个进程打开多个文件


        如《APUE E3rd》的Figure3.7所示,一个进程打开多个文件。
        文件描述符0和1各通过一个文件表打开一个文件
        注:可能文件描述符0和3指向同一个文件表

    多个进程打开一个文件

        
        如《APUE E3rd》中figure 3.8所示,两个进程打开同一个文件。
        两个进程使用的文件表都是进程独有的。也就是说一个文件表虽然是内核维护的,但它至属于某一个特定进程。
            
  • 相关阅读:
    Mysql 三大特性详解
    MySQL Innodb日志机制深入分析
    Bootstrap学习地址
    Java【锁】
    Java【tomcat】配置文件
    nginx配置文件详解【nginx.conf】
    Sqlserver2008[索引]
    网络知识
    RestClient火狐接口测试地址
    java基础1JDK各大版本下载地址
  • 原文地址:https://www.cnblogs.com/Windeal/p/4284664.html
Copyright © 2011-2022 走看看