欢迎访问我们的Linux内核之旅:http://www.kerneltravel.net/   网站及本博客中的文章,允许在不改变内容的前提下对其以任何形式复制和重新刊登,但必须 附有版权信息,并声明出处。

释义Linux内核(7)-文件系统概述(2)

上一篇 / 下一篇  2007-07-14 09:32:12 / 个人分类:释义Linux内核

查看( 2360 ) / 评论( 0 )
文件类型
Unix文件可以是下列类型之一:
·     普通文件(regular file)

·     目录(directory)

·     符号链(symbolic link)

·     面向块的设备文件(block-oriented device file)

·     面向字符的设备文件(character-oriented device file)

·     管道(pipe)和命名管道(named pipe)(也叫FIFO)

·     套接字(socket)

前三种文件类型是任何Unix 文件系统的基本类型。其实现将在第十七章详细讨论。

设备文件与I/O设备以及集成到内核中的设备驱动程序相关。例如,当程序访问设备文件时,它直接访问与那个文件相关的设备(参见第十三章)。

管道和套接字是用于进程间通信的特殊文件(参见本章后面的 “同步和临界区”一节以及第十八章)。

QUOTE:

想想为什么物以类聚人以群分,就明白文件为什么文件类型来划分。

文件描述符与索引节点

Unix将文件的内容和描述文件的信息给出清楚的区分。除了设备文件和特殊文件,每个文件都由字符序列组成。文件内容不包含任何控制信息,如文件长度或文件结束符(EOF)。

文件系统处理文件需要的所有信息包含在一个叫做索引节点(inode)的数据结构中。每个文件都有自己的inode,文件系统用inode来标识文件。

QUOTE:

所谓的索引节点,其实就是存放文件属性的地方,就像描述任何一个对象的属性一样


虽然文件系统及内核函数对inode的处理可能随Unix系统的不同有很大的差异,但它们必须至少提供在POSIX标准中指定的如下属性:

·     文件类型(参见前一节)。

·     与文件相关的硬链接个数。

·     以字节为单位的文件长度。

·     设备标识符(即包含文件所在设备的标识符)。

·     在文件系统中标识文件的inode号。

·     文件拥有者的UID。

·     文件的GID。

·     几个时间标记,表示inode状态改变的时间、最后访问时间及最后修改时间。

·     访问权限和文件模式(参见下一节)。

QUOTE:

描述一个对象什么样的属性,因所处的环境决定而已


访问权限和文件模式

文件潜在的用户分为三种类型:

·     作为文件所有者的用户。

·     同组用户,不包括所有者。

·     所有剩下的用户(其他)。

QUOTE:

这种划分方法你同意吗,若不?你有什么好的建议?
有三种类型的访问权限:读、写及执行,每组用户都有这三种权限。因此,文件访问权限的组合就用九种不同的二进制来标记。还有三种附加的标记,即suid (Set User ID), sgid (Set Group ID),及sticky(用来定义文件模式)。当这些标记应用到可执行文件时有如下含义:

suid
进程执行一个文件时通常保持进程拥有者的UID。然而,如果设置了可执行文件suid的标志位,进程就获得了该文件拥有者的UID。

sgid
进程执行一个文件时保持进程组的GID。然而,如果设置了可执行文件sgid的标志位,进程就获得了该文件组的ID。
sticky
设置了sticky 标志位的可执行文件相当于向内核发出一个请求,当程序执行结束以后,依然将它保留在内存(注9)。

当文件由一个进程创建时,文件拥有者的ID就是该进程的UID。而其组ID可以是进程创建者的GID,也可以是父目录的GID,这取决于父目录sgid标志位的值。

QUOTE:

Unix文件设计者,设计这几种标记的真正目的是什么?


[url=#_ftnref1]注[/url]9:这个标志已经过时,现在使用基于代码页共享的其他方法(参见第七章)。

[ 本帖最后由 陈莉君 于 2007-7-14 09:13 编辑 ]

TAG:

我来说两句

(可选)

Open Toolbar