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

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只是将链接从一个目录移动到另一个目录,并没有移动数据块。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值