深入理解linux i节点(inode)
对于Unix系列的操作系统,大多都有v节点。但是对于linux来说,只有通用的i节点,却没有v节点。
下面来探讨一下,linux下的i节点。
linux中,文件查找不是通过文件名称来查找的。实际上是通过i节点来实现文件的查找定位的。我们可以形象的将i节点看做是一个指针fip。当文件存储到磁盘上去的时候,文件肯定会存放到一个磁盘位置上,可以这样想象,既然文件数据是存放在磁盘上的,如果我们知道这个文件数据的地址,当我们想要读写文件的时候,我们是不是直接使用这个地址去找到文件就可以了呢?
是的,linux下,i节点其实就是可以这么认为,把i节点看作是一个指向磁盘上该文件存储区的地址。只不过这个地址我们一般是没办法直接使用的,而是通过文件名来间接使用的。事实上,i节点不仅包含了文件数据存储区的地址,还包含了很多信息,比如数据大小,等等文件信息。但是i节点是不保存文件名的。文件名是保存在一个目录项中。每一个目录项中都包含了文件名和i节点。
我们可以通过一个图来看看目录项,i节点,文件数据四者之间的关系。
从上图可以看到,目录项中包含了文件名和i节点。
同时,你会发现上图中,目录项A和目录项B的i节点指向同一个存储区,其中这个存储区存放的是printf("ha")的数据。
也就是以为这helloA.c和helloB.c的内容是一样的。
这就引出了一个硬链接和符号链接的概念
硬链接 ln -d
符号链接 ln -s。
要想得到helloA.c和helloB.c这种关系,我们可以使用如下命令:
#ln -d helloA.c helloB.c
这样,就得到了helloA.c的硬链接helloB.c
对于硬链接来说。如果删掉源文件helloA.c,那么磁盘上数据文件时不会删除的。因为i节点上记录了改文件的硬链接数。只有硬链接数是0的时候,文件名的时候,该数据在磁盘上才会删除。
也就是说。这里,如果我们使用命令:
# rm -rf helloA.c
helloB.c同样可以正常使用,其内容就是printf("ha");
但是如果是符号链接:
#ln -s helloB.c helloC.c
这就是所谓的符号链接,符号链接其实是文件索引的索引。当源文件helloB.c删除之后,其实磁盘数据文件还在,helloC.c也无法使用。
符号链接包含了一个文件名的路劲,如果这个文件名被删除,这符号链接自然就不能正常工作了。
相关文档:
在LINUX环境开发驱动程序,首先要探测到新硬件,接下来就是开发驱动程序。
常用命令整理如下:
用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart)
查看CPU信息:cat /proc/cpuinfo
查看板卡信息:cat /proc/pci
查看PCI信息:lspci (相比cat /proc/pci更直观)
查看内存信息:cat /proc/meminfo
......
Posted 十月 14th, 2005 by beinan
Fedora
Redhat
基础入门
Fedora
作者:北南南北
来自:LinuxSir.Org
摘要:本文主要讲述在Linux 系统中用户(user)和用户组(group)管理相应的概念;用户(user)和用户组(group)相关命令的列举;其中也对单用户多任务,多用户多任务也做以解说,本文应该说 ......
陈皓 (CSDN)
概述
——
什么是
makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和
professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解
HTML的标识的含义。特别 ......
原文链接:http://blog.csdn.net/ecjtuync/archive/2008/10/23/3132789.aspx
Linux静态/动态链接库的创建和使用
和Windows系统一样Linux也有静态/动态链接库,下面介绍创建和使用方法:
假设有下面几个文件:
头文件String.h,声明相关函数原形,内容如下:
Strlen.c:函数Strlen的实现,获取给定字符串的长度,内容如 ......