第三章 目录与文件属性:编写ls
1. 在前两章中重点介绍了与文件读写有关的操作如何实现,本章主要介绍目录、文件的类型、如何获取文件相关的属性值。
2. ls命令:可以列出给定目录的内容;显示给定文件的属性信息。ls的使用方法,各个常用命令行选项。理解ls包括三个方面:
1) 如何分辨给定的目录还是文件
2) 如何列出目录信息
3) 如何读取并显示文件属性
3. 文件树:Unix下磁盘上的文件和目录被组织成一颗目录树,每个节点是目录或者是文件。
4. ls命令的工作方式与who命令相似,只是who是打开文件、读取信息指导末尾,而ls是打开目录,读取信息直到目录末尾。
5. 目录是什么?目录如utmp一样是一个特殊文件,其内容的每一项记录是文件和目录的名字(其实这一项中还包含其他很多有用的信息),且目录文件永远不为空,因为每个目录中包含有“.”“..”两项,分别表示当前目录和上一级目录。
6. 既然ls命令的工作原理同who相似,那么也有一套与之相应的函数:opendir、readdir、closedir、seekdir、telldir、rewinddir。这些函数与文件操作的函数功能类似。
7. readdir读取的便是目录文件中的记录,返回的是指向当前记录的指针。记录的类型是struct direent,这个结构体定义在/usr/include/dirent.h中。
8. ls1.c:给出指定目录,获取目录信息并显示(若没有给定目录,则以当前目录为操作对象)。使用opendir、readdir。
9. ls –l 命令的作用:列出文件的属性信息,命令输出的各个属性信息的介绍。使用系统调用stat来获取文件的属性信息(stat系统调用的语法,提供的信息)。
10. 通过stat系统调用获得的属性信息的格式转换技巧:针对stat中st_mode成员(16位)的掩码的概念和使用(转换包括:文件类型(4位)、许可权限(9位));将ID/GID转换为用户名和组名;
11. ls2.c:实现ls –l功能。
12. stat中st_mode成员剩下3位的作用:set-user-ID位(修改密码的程序passwd具有SUID位)、set-group-ID位(原理同SUID位)、sticky位(对于文件和目录意义不同:对于文件具有该位使得文件在没有被使用的时候也会被保留在交换空间而不是普通磁盘上,这样缩短装载时间,对于目录而言具有该位说明此目录中的文件只能被文件所有者删除);上述三个特殊位如何在许可权限描述字符rwxrwxrwx中显示。
13. 文件属性的设置和修改:
1) 文件类型:在创建时确定文件的类型,无法更改。
2) 许可位和特殊属性位:创建文件时确定,可以同过chmod系统调用修改(其语法)。
3) 文件的链接数:连接数是文件被引用的次数,对某个文件进行link操作(类似win下的创建快捷方式)就会增加一个连接数,而unlink操作反之。
4) 文件所有者与组:文件创建者位文件所有者,其所在组为文件的组,可以通过chown来修改文件所有者和组(其语法)。
5) 文件大小:实际占用存储空间的大小,文件添加内容时,其大小自动增加。
6) 文件相关的时间:最后修改时间、最后访问时间、最后属性修改时间。修改时间属性的熊调用utime、shell命令touch(使用方法)。
7) 文件名:创建时create指定、rename系统调用、mv命令(使用方法)。
14. 小结
1) 磁盘上文件和目录的树形结构,目录是特殊的文件
2) 文件属性的获取,文件属性的具体含义,文件属性的创建和修改
----------------------------------------------------------------------------------------
本文链接http://blog.csdn.net/yongchurui/article/details/22334827
2014.03.27