Unix内核中打开文件的表示
Unix内核中已经打开文件,通过三种数据结构表示:
- 每个进程的进程表中的记录项,包含打开的文件的文件描述符表,与之关联的是:
- 文件描述符标识
- 指向一个文件表项的指针
- 内核为所有打开文件维持一张文件表,每个文件表项代表一个打开文件,包含:
- 文件状态标识(读、写、添加、同步、非阻塞等
- 当前文件偏移量
- 指向该文件v节点表项的指针
3. 每个打开文件都有且只有一个V节点(v-node)结构
- 文件类型
- 对此文件进行各种操作的函数的指针
- (大多数文件)该文件的i节点(i-node,索引节点)
一个打开的文件的结构如下图所示:

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

每个进程都只有自己的进程表项,故而每个进程都有自己的文件表项,但是文件可以被多个进程各自打开而每个打开文件都有且只有一个V节点表,于是会有多个文件表项指向同一个V节点表的情况。
而为什么每个进程都有自己的文件表项而不是每个打开文件都只有一个文件表项呢?首先要知道文件表中的当前文件偏移量指的是每次write之后表示增加缩写的字节数,所以每个进程对应一个文件表保证了每个进程都有自己对该文件的当前偏移量。
Unix内核中打开文件的表示的更多相关文章
- 【转】 Linux内核中读写文件数据的方法--不错
原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法 有时候需要在Linuxkernel--大 ...
- 【转】在linux内核中读写文件 -- 不错
原文网址:http://blog.csdn.net/tommy_wxie/article/details/8194276 1. 序曲 在用户态,读写文件可以通过read和write这两个系统调用来完成 ...
- 解决sublime text 2总是在新窗口中打开文件
在mac下不是很喜欢sublime text 2 总是在新窗口中打开文件,很麻烦,文件打多了,就会出现N多窗口,虽然可以直接打开当前目录可以解决,但有时候查看其它项目中的单个文件,就比较麻烦.百度一直 ...
- Linux操作系统中打开文件数量的查看方法
Linux操作系统中打开文件数量的查看方法ulimit -n 4096也就是限制用户的最大文件打开数为4096个 在网上查了关于怎么查看文件打开数的文章大致有两种说法/proc/sys/fs/file ...
- 解决sublime text 2总是在新窗口中打开文件(标签中打开)
在mac下不是很喜欢sublime text 2 总是在新窗口中打开文件,很麻烦,文件打多了,就会出现N多窗口,虽然可以直接打开当前目录可以解决,但有时候查看其它项目中的单个文件,就比较麻烦.百度一直 ...
- linux内核中的文件描述符(二)--socket和文件描述符
http://blog.csdn.net/ce123_zhouwei/article/details/8459730 Linux内核中的文件描述符(二)--socket和文件描述符 Kernel ve ...
- 在eclipse中打开文件所在的目录
eclipse中默认是不能直接打开文件所在的目录的,需要在文件中右键-->properties-->location,复制到资源管理器中才能打开文件所在的目录.这种方法很麻烦.这里介绍一种 ...
- 如何解决sublime text 2总是在新窗口中打开文件及文件夹
如何在原窗口打开文件 具体设置:Preferences -> Settings – Default -> 搜索open_files_in_new_window,将其true 改为 fals ...
- java中打开文件流后要关闭后重新打开
记录错误,打开文件流一定要关闭并重新打开文件流,不然取的文件内容永远是第一次取的文件内容: /** * 读取配置文件 */ private Properties readProperties() { ...
随机推荐
- 对oracle数据库Blob字段的操作
java实体类 定义类型 byte[] private byte[] str_blob hibernate映射文件类型oracle.sql.BLOB <property name="s ...
- js生成带参的二维码
最近项目中有需求生成带参的二维码,考虑过用JAVA后台生成返回前端展示,后面了解到用jquery的qrcode.js插件可以很好现实 引入js: require.config({ baseUrl : ...
- for变量作用域(vc6与vs)
for变量:写在for循环初始语句中的变量.如:for (int i=1,j=2; i<100; i++) vc6的for变量 int i 的作用域: void func(bool condit ...
- [笔记]HTML
链接 <a href="链接地址">链接显示名</a> <a name="C4">target</a> < ...
- div滚动底部加载li,window滚动底部加载li
DIV固定高度滚动条滚动最底部,加载新的li <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...
- hdfs中block的使用情况,副本所在情况等等
hadoop fsck /user/hive/warehouse/dataplat.db/hive_datacppa2xsourcendchinaraw/partitiondate=2016-11-2 ...
- (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题
我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...
- dedecms为什么文档标题最大长度只能显示二十个汉字呢?
今天遇到文章标题无论怎么修改,超出二十个汉字不能全部保存,系统只截取前二十个汉字的内容进行保存. 在后台查看系统设置: 系统——其它选项——文档标题最大长度,的值是60,对应的数据库表字段char的长 ...
- Compare Version Numbers
Compare two version numbers version1 and version1. If version1 > version2 return 1, if version1 & ...
- hihoCoder1388 Periodic Signal(2016北京网赛F:NTT)
题目 Source http://hihocoder.com/problemset/problem/1388 Description Profess X is an expert in signal ...