您的位置:首页 > 运维架构 > Linux

Understanding Unix/Linux Programming note:chapter 2, chapter 3, chapter 4

2013-10-23 00:58 615 查看

chapter 2:

Key-word: open file, read file, who, cp, logout

通过介绍who命令的编写来讲解Unix对文件的操作。

who命令用于显示系统中活动用户的情况,所有的这些数据都记录在utmp文件中,以struct utmp的形式存储。因此想要获取这些信息,就必须读utmp文件。这就用到了open, read, close函数。

Notice:

The utmp file allows one to discover information about who is currently using the system.

The file is a sequence of utmp structures, declared as follows in <utmp.h>.

也就是说:已登录用户的信息放在/var/run/utmp文件中,而utmp中的数据结构定义在/usr/include/utmp.h中。

cp命令就是read一个文件的数据,再将这组数据write入另外一个文件。

logout的实现是通过read一个文件的数据,修改这些数据,再将修改后的数据写入这个文件。

chapter 3:

Key-word: open directory, opendir, readdir, closedir, stat, ls

通过介绍ls命令的编写 来讲解Unix对目录的操作。

ls命令用于列出目录中所有文件(目录也是一种特殊的文件)的名字,以及这些文件的类型和属性。

目录是一种特殊的文件,它的内容是文件和目录的名字、i-节点等,这些信息以struct dirent 的形式记录在目录中(因为目录是一种特殊的文件)。因此要列出一个目录内所有目录和文件的名字、i-节点,就需要调用opendir, readdir, closedir通过读目录来获取信息。

注意:readdir返回的是一个指向目录的当前记录的指针,也就是一个指向struct dirent类型的指针。readdir一次只获取一个指向当前记录的指针,获取完后,Unix或者readdir内部已经将指针指向下一个记录,再调用readdir时就获取的是指向这个记录的指针。

但是要获取更详细的文件信息,就要调用stat。stat用于提取文件属性,包括:模式(mode),链接书(links),文件所有者(owner),大小(size)等,这些信息以struct stat 的形式记录在i-节点表中。每个i-节点编号指向i-节点表中的一个struc stat 结构。

如下所示stat有两个参数,第一是输入参数--文件名,第二个是输出参数--该文件的属性信息。

int result = stat(char * fname, struct stat * bufp)

因此,ls的实现过程就是:首先通过readdir()获取该目录内所有文件和目录的名字;然后调用stat来获取与这些文件和目录对应的更详细的文件属性。

chapter4:

Key-word: readdir, stat, pwd
本章通过介绍pwd命令的编写来讲解Unix文件系统。
pwd命令的编写主要用到了上一章讲到的readdir, stat命令。工作过程书中已经说明,如下:
(1)因为“."表示当前目录,可以用stat命令来获取当前目录里的i-节点号。
(2)因为”.."表示上级目录,可以用chdir命令来切换到上级目录。
(3)在“.."目录中,用readdir可以获取与(1)中i-节点对应的该目录的名字。
重复(1)到(3)步,直到到达文件树的顶端。

pwd命令的编写并不能解释Unix文件系统。下面是本章的一些重要概念:
(1)文件系统是文件和目录的集合。
(2)目录是名字(下层目录和文件的名字)和指针(下层目录和文件对应的i-节点表)的列表。
(3)目录中的每一个入口指向一个文件和目录。

(4)目录包含指向父目录和子目录的入口。

(5)Unix文件系统由3部分组成:1)超级块(无需理解); 2)i-节点表,用于存储文件属性; 3)数据块,用于存储文件内容。

(6)i-节点号是文件的唯一标识;
注:(6)说明对于一个文件(数据块),i-节点号只能有一个,但是对应的链接(文件名)可以有多个。

(7)在Unix文件系统中,文件没有文件名,文件仅拥有i-节点号;但是链接有名字,即文件名;

(8)命令mkdir, rmdir, rm, ln, mv,处理的不是数据块,而是与i-节点号对应的链接。如:mv只是将链接从一个目录移动到另一个目录,并没有移动数据块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐