Unix内核中已经打开文件,通过三种数据结构表示:

  1. 每个进程的进程表中的记录项,包含打开的文件的文件描述符表,与之关联的是:

    • 文件描述符标识
    • 指向一个文件表项的指针
  2. 内核为所有打开文件维持一张文件表,每个文件表项代表一个打开文件,包含:
    • 文件状态标识(读、写、添加、同步、非阻塞等
    • 当前文件偏移量
    • 指向该文件v节点表项的指针

3. 每个打开文件都有且只有一个V节点(v-node)结构

    • 文件类型
    • 对此文件进行各种操作的函数的指针
    • (大多数文件)该文件的i节点(i-node,索引节点)

  一个打开的文件的结构如下图所示:

这些信息都是打开文件时从磁盘读入内存的

为什么要有V节点结构呢?对在一个计算机系统上的多文件系统类型提供支持。也称之为虚拟文件系统(所以v-node中的v指的是virtual?)linux没有将相关数据结构分为i-node和v-node,而是采用了一个独立于文件系统的i节点和一个依赖于文件系统的i节点

每个进程都只有自己的进程表项,故而每个进程都有自己的文件表项,但是文件可以被多个进程各自打开而每个打开文件都有且只有一个V节点表,于是会有多个文件表项指向同一个V节点表的情况。

而为什么每个进程都有自己的文件表项而不是每个打开文件都只有一个文件表项呢?首先要知道文件表中的当前文件偏移量指的是每次write之后表示增加缩写的字节数,所以每个进程对应一个文件表保证了每个进程都有自己对该文件的当前偏移量。

Unix内核中打开文件的表示的更多相关文章

  1. 【转】 Linux内核中读写文件数据的方法--不错

    原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法  有时候需要在Linuxkernel--大 ...

  2. 【转】在linux内核中读写文件 -- 不错

    原文网址:http://blog.csdn.net/tommy_wxie/article/details/8194276 1. 序曲 在用户态,读写文件可以通过read和write这两个系统调用来完成 ...

  3. 解决sublime text 2总是在新窗口中打开文件

    在mac下不是很喜欢sublime text 2 总是在新窗口中打开文件,很麻烦,文件打多了,就会出现N多窗口,虽然可以直接打开当前目录可以解决,但有时候查看其它项目中的单个文件,就比较麻烦.百度一直 ...

  4. Linux操作系统中打开文件数量的查看方法

    Linux操作系统中打开文件数量的查看方法ulimit -n 4096也就是限制用户的最大文件打开数为4096个 在网上查了关于怎么查看文件打开数的文章大致有两种说法/proc/sys/fs/file ...

  5. 解决sublime text 2总是在新窗口中打开文件(标签中打开)

    在mac下不是很喜欢sublime text 2 总是在新窗口中打开文件,很麻烦,文件打多了,就会出现N多窗口,虽然可以直接打开当前目录可以解决,但有时候查看其它项目中的单个文件,就比较麻烦.百度一直 ...

  6. linux内核中的文件描述符(二)--socket和文件描述符

    http://blog.csdn.net/ce123_zhouwei/article/details/8459730 Linux内核中的文件描述符(二)--socket和文件描述符 Kernel ve ...

  7. 在eclipse中打开文件所在的目录

    eclipse中默认是不能直接打开文件所在的目录的,需要在文件中右键-->properties-->location,复制到资源管理器中才能打开文件所在的目录.这种方法很麻烦.这里介绍一种 ...

  8. 如何解决sublime text 2总是在新窗口中打开文件及文件夹

    如何在原窗口打开文件 具体设置:Preferences -> Settings – Default -> 搜索open_files_in_new_window,将其true 改为 fals ...

  9. java中打开文件流后要关闭后重新打开

    记录错误,打开文件流一定要关闭并重新打开文件流,不然取的文件内容永远是第一次取的文件内容: /** * 读取配置文件 */ private Properties readProperties() { ...

随机推荐

  1. gulp基本介绍

    一.gulp是什么 gulp就是用来机械化的完成重复性质(如less->css:js.css压缩:js混淆)的工作:gulp的机制就是将重复工作抽象成一个个的任务. 二.gulp使用 a.首先确 ...

  2. Tcl

    Tcl(发音 tickle)是一种脚本语言.由John Ousterhout创建.TCL经常被用于快速原型开发 RAD.脚本编程.GUI编程和测试等方面. Expect Expect是 另外一种非常流 ...

  3. HTTP协议GET和POST请求的区别

    浏览器中输入网址访问资源一般都是通过GET方式:在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交.Http协议定义了与服务器交互的不同方法,最基本的方法有4种, ...

  4. sysbench的安装与使用(with MySQL)

    sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试. 项目主页: http://sysbench.sourceforge.net/ 安装文档htt ...

  5. 11.ok6410之led驱动程序编写

    led驱动程序编写 本文主要包含三部分,led驱动程序led.c编写,编译驱动程序的makefile的编写,以及使用驱动程序的应用程序led_app的编写 一.led.c编写 #include < ...

  6. [C++][数据结构]栈(stack)的实现

    对于栈的定义,前人之述备矣. 我实现的是一个stack<value>容器类,支持push,pop,top,size,empty,clear和copy construction操作. 主要的 ...

  7. java导出word(带图片)

    public class CreateWordDemo { public void createDocContext(String file) throws DocumentException,IOE ...

  8. 关于DOM的一些操作 整理 积累

    var chils= s.childNodes;  //得到s的全部子节点 var par=s.parentNode;   //得到s的父节点 var ns=s.nextSbiling;   //获得 ...

  9. npm-bluebird使用

    API 注意 时刻注意return; 使用Promise.promisify简化对test(val, function(err, result){})的处理; 尽量避免使用deferred objec ...

  10. FZU月赛20160416 ABEF

    Problem A ABCDEFG Accept: 302    Submit: 442Time Limit: 1000 mSec    Memory Limit : 32768 KB  Proble ...