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() { ...
随机推荐
- android 图片缓存
一.Picasso https://github.com/square/picasso Picasso是Square公司开源的一个Android平台上的图片加载框架,简单易用,一句话搞定项目中的图片加 ...
- 第一章 Web应用程序简介
1.1 Web应用程序基础知识 URL.URN与URI URL:Uniform Resource Locator URN:Uniform Resource Name URI:Uniform Resou ...
- android 第三方登录 --- QQ
1,jar包 2,配置AndroidManifest.xml <activity android:name=".login.LoginActivity" android:co ...
- static lib和dynamic lib
lib分为 staticlib 和 dynamic lib: 静态lib将导出声明和实现都放在lib中,编译后所有代码都嵌入到宿主程序, 链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放 ...
- Designing IP-Based Video Conferencing Systems: Dealing with Lip Synchronization(唇音同步)
转自:http://www.ciscopress.com/articles/article.asp?p=705533&seqNum=6 Correlating Timebases Using ...
- c++2008 并行配置文件和获取字典的所有key的方法
1 需要 在官网 下载对应的执行包... 2, # !/usr/bin/python3.4 # -*- coding: utf-8 -*- b = { 'video':0, 'music':23 } ...
- Android调用默认浏览器打开指定Url
业务员有需求要将一个wap站在手机上以App的形式打开,还不要嵌套WebView,只能以浏览器打开.查了点资料,就有了下面这货. package com.gzz.whyinzi; import and ...
- 解决 卸载Mysql后,服务还在的问题
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹:删除HKEY_LOCAL_MACHINE\ ...
- Memcache及telnent命令详解
1.启动Memcache 常用参数 memcached 1.4.3 -p <num> 设置端口号(默认不设置为: 11211) -U <num> UDP监听 ...
- openx中如何使用site-variable(参数)限制(关键词)广告显示
openx是个很强大的广告管理系统,可以根据不同的情况显示不同的广告.其中可以根据get参数值的不同来显示,即delivery limitation中的site-variable选项,name表示变量 ...