转载

Unix文件

理解inode

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector,0.5KB),多个扇区组成"块"(block,一般为4k)。 操作系统以块为单位读取硬盘。 一个文件占用一个 inode(索引节点),inode中记录文件的元信息。 inode 的数目和大小(128b/256b)在格式化时指定,因此文件系统所能建立的总档案数目是有限制的。

inode包含的具体内容

  • inode编号
  • 文件类型
  • 文件的字节数
  • 文件拥有者的User ID
  • 文件的Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  • 链接数,即有多少文件名指向这个inode(硬链接的数量)
  • 文件数据block的位置,如果文件大(超过4k),会占用多个 block。

用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

文件名与inode的映射关系实际上是保存在目录项中,目录(directory)也是一种文件,文件内容是该目录下的 文件名 以及该 文件名对应的inode号码

硬链接与软连接 Unix文件

硬链接源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。 软链接 源文件的内容是目标文件的路径。读取软连接文件时,系统会自动将访问者导向目标文件。如果删除了目标文件,打开软连接文件时就会报错:"No such file or directory"。

文件描述符

内核为每个进程维护一个打开文件的列表,该表被称为文件表(file table)。该表由一些叫做文件描述符(file descriptors)的非负整数进行索引,一个文件描述符对应进程中一个打开的文件。 UNIX系统支持在不同进程间共享打开的文件。在说明共享之前,先介绍内核用于所有IO的数据结构。 内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。 1) 每个进程在进程表中都有一个记录项,记录项中包括有一张打开的文件描述表,可将其视为一个矢量,每个描述符占用一项。与每个文件描述符相关联的是:

  • 文件描述符标志。
  • 指向一个文件表项的指针。

2)内核为所有打开文件维护一张文件表,每个文件表项包含:

  • 文件状态标志(读、写、添写、同步和非阻塞等)
  • 当前文件偏移量
  • 指向该文件v节点表项的指针。

3)每个打开文件或设备都有一个v节点结构。v节点包含了文件类型和对此文件进行各种操作的函数的指针。对于大多数文件,v节点还包含了该文件i节点。这些信息是在打开文件时从磁盘上读入内存的,所以所有关于文件的信息都是快速可供使用的。例如:i节点包含了文件的所有者、文件长度、文件所在的设备、指向文件实际数据块在磁盘上所在位置的指针等等。 Unix文件

如果两个独立进程各自打开了同一个文件,假定第一个进程在文件描述符3上打开该文件,另一个进程在文件描述符4上打开该文件。打开该文件的每个进程都得到一个文件表项,但对一个给定的文件只有一个v节点表项(对于同一个文件,所有进程共享v节点表项),每个进程都有自己的文件表项使每个进程都有他自己的对文件的当前偏移量。

  • 习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。
  • POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号码。

dup

` int dup(int filedes); int dup2(int filedes,int fileses2);
` 由dup返回的新文件描述符一定是当前可用文件描述符中最小数值。用dup2则可以用filedes2参数指定新描述符的数值。如果fiedes2已经打开,则先将其关闭。如若filedes等于filedes2,则dup2返回fiedes2,而不关闭它。这些函数返回的新文件描述符与参数filedes 共享同一个文件表项

fork

fsync

参考文献

理解inode linux中文件描述符fd和文件指针flip的理解

原文  http://shanks.leanote.com/post/5908aa3ab757
正文到此结束
Loading...