![Chapter3-目录与文件属性_第1页](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/13eed8bc-1f99-4d2d-8efa-9bae460f6074/13eed8bc-1f99-4d2d-8efa-9bae460f60741.gif)
![Chapter3-目录与文件属性_第2页](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/13eed8bc-1f99-4d2d-8efa-9bae460f6074/13eed8bc-1f99-4d2d-8efa-9bae460f60742.gif)
![Chapter3-目录与文件属性_第3页](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/13eed8bc-1f99-4d2d-8efa-9bae460f6074/13eed8bc-1f99-4d2d-8efa-9bae460f60743.gif)
![Chapter3-目录与文件属性_第4页](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/13eed8bc-1f99-4d2d-8efa-9bae460f6074/13eed8bc-1f99-4d2d-8efa-9bae460f60744.gif)
![Chapter3-目录与文件属性_第5页](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/13eed8bc-1f99-4d2d-8efa-9bae460f6074/13eed8bc-1f99-4d2d-8efa-9bae460f60745.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Unix/Linux编程北京化工大学信息科学与技术学院计算机系易军凯第第3章章 目录与文件属性:编写目录与文件属性:编写ls概念与技巧概念与技巧l目录是文件的列表l如何读取目录的内容l文件类型以及如何知道文件的类型l文件属性以及如何知道文件的属性l位操作及掩码的使用l用户与组ID及passwd数据库 相关系统调用与函数相关系统调用与函数lopendir 、readdir、closedir、seekdirlstatlchmod、chown、utimelrename相关命令相关命令lls主要内容:l3.1 介绍l3.2 关于ls命令的3个问题 l3.3 编写ls -1 l3.4 三个特殊的位l3.
2、5 ls小结 l3.6 设置和修改文件的属性l 已经介绍了如何读/写文件内容的方法。除了内容之外,文件还有很多属性,比如文件所有者、最好修改时间、文件大小、类型等。文件名在目录中列出,正如电话号码簿中列出的人名一样。如何读取文件名和文件的属性呢?l Ls命令可以列出目录中所有文件的名字,以及这些文件的其它信息。本章通过分析ls命令来学习目录和文件的类型与属性。3.1 3.1 介绍介绍3.2.1 L s命令能做什么?3.2.2 L s是如何工作的?3.2.3 如何编写L s?3.2 3.2 关于关于ls的三个问题的三个问题3.2.1 ls命令能做什么?lls命令可以列出目录中所有文件的名字,以及
3、这些文件的其它信息。lsls /tmpls /hello.cls lls l /etcls l hello.c目录文件列出详细信息如果参数是目录,ls列出目录的内容;如果参数是文件,ls列出文件名和属性。l 经常用到的命令行选项:ls - a 列出的内容包含以“.”开头的文件ls - lu 显示最后访问的时间ls - s 显示以块为单位的文件大小ls - t 输出是按时间排序ls - F 显示文件类型Unix中,中,ls一般不会列出以一般不会列出以.开始的文件,当开始的文件,当ls 加加-a后才列出。后才列出。l问题答案 ls命令做两件事:列出目录的内容 显示文件的信息 ls能判定参数指定的是
4、文件还是目录,采取不同的操作。能判定参数指定的是文件还是目录,采取不同的操作。l掌握三点编写ls 如何列出目录的内容 如何读取并显示文件的属性 判断给出的名字是目录还是文件目录树结构:磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。Unix系统中每个文件都位于某个目录中,在逻辑上是没有驱动器或卷的。这样实现ls就只需考虑文件和目录两种情况,无需考虑驱动器和分区。大方框表示目录,大方框内的小方框表示文件,目录之间的连线表示目录之间的组织关系。3.2.2 L s是如何工作的?lLs产生一个文件名的列表,它大致是这样工作的: Open directory +-read entry -en
5、d of dir-+ | display file info | _ Close directory -+ 上述逻辑与who的十分相似,主要的区别是who从文件中读取数据,而ls从目录中读取数据,读目录与读文件区别大吗?目录到底是什么呢?l什么是目录? 目录是一种特殊的文件,它的内容是文件和目录的名字。每个目录都至少包含两个特殊的项“.”和“.”,其中“.”表示当前目录,“.”表示上一级目录。l是否可以用open、read和close来操作目录 $ cat/ $ more/tmp $ od-c/dev 由例子可知: cat和和od可以打开目录。可以打开目录。 more可以区分出文件和目录,拒绝
6、对目录操作。可以区分出文件和目录,拒绝对目录操作。 目录内不是无格式的文本而是包含一定的数据结构。目录内不是无格式的文本而是包含一定的数据结构。 l如何读目录的内容? $man k direct $man k direct | grep read Answer: opendir(),readdir(),closedir()从目录中读到一项从目录中读到一项3.2.3 如何编写ls?lls的算法如下: main() opendir while(readdir) print d_name closedir还能做什么?l 排序 把所有文件名读入一个数组,用qsort函数把数组排序l 分栏 先把文件名读
7、入数组,然后计算出列的宽度和行数l “.”文件 使lsl能够接受选项-a,并在没有-a的时候不显示隐藏文件l 选项 ll列出文件内容 模式、链接数、文件所有者、组、大小、最后修改时间、文件名l显示文件的详细信息 $ man k file | grep i information Answer:使用系统调用stat3.3 3.3 编写编写ls -13.3.1 ls做的两件事3.3.2 用stat读取文件的属性:Stat目标得到文件的属性头文件#include函数原型Int result=stat(char*fname,struct stat *bufp)参数Fname 文件名Bufp 指向buf
8、fer的指针返回值-1 遇到错误0 成功返回stat提供的其他信息:lSt_mode 文件类型和许可权限lSt_uid 用户所有者的IDlSt_gid 所属组的IDlSt_size 所占的字节数lSt_nlink 文件链接数lSt_mtime 文件最后修改时间 文件名、文件大小、链接数都没有问题;最后修改时间是time_t类型的,可以用ctime将其转化成字符串用户所有者和组字段都是数值,而显示出来应该是用户名和组名。模式字段以数字形式输出,然而需要的是如下形式:-rw-rw-r-3.3.3 如何实现文件类型与许可权限文件类型与许可权限4位用作文件类型,最多可以标识16种类型接下来3位是文件特
9、殊属性,1表示具有某个属性,0代表没有 3.3.4 将模式字段转换成字符(1)字段的编码:编码的例子617-495-4204电话号码027-93-1111社会保障号128.103.33.100IP地址将多种信息编码到一个整数不同的不同字段中将多种信息编码到一个整数不同的不同字段中(2)如何读取被编码的值l掩码的概念掩码会将不需要的字段置0,需要的字段的值不发生改变。l整数是bit组成的序列整数在计算机中是以bit序列形式存在的。图3.5显示了如何以二进制的0和1的串来表示十进制的215。 在整数和二进制数之间转换在整数和二进制数之间转换l掩码技术:与0作位与(&)操作可以将相应的bit
10、位置为0 位与操作位与操作l使用八进制数将二进制数每三位分为一组来操作,这就是八进制数(0至7)。如可以把二进制的1000000110110100分为1,000,000,110,110,100 从而得到八进制的10064,这样更容易理解。(3)使用掩码来解码得到文件类型if (info.st_mode & 0170000)=0040000) printf(“this is a directory”);(4)解码得到许可权限if ( st_mode & 004 ) printf (“readable by others”);if ( st_mode & 002) prin
11、tf (“writable by others”);(5)解码并编写ls3.3.5 将用户/组ID转换成字符串l /etc / passwd 包含用户列表l 通过getpwuid来得到完整的用户列表 getpwuid需要UID作为参数,返回一个指向struct passwd的指针。l 通过getgrgid来访问组列表l UID没有对应的用户名l /etc/group是组的列表l 用户可以同时属于多个组l 通过getgrgid来访问组列表3.3.6 编写ls2.cmain(int ac, char *av) if ( ac = 1 ) do_ls( . ); else while ( -ac )
12、printf(%s:n, *+av );do_ls( *av ); void do_ls (char dirname)void do_stat(char * filename)void show_file_info( char*filename,struct stat* info_p)void mode_to_letters (int mode,char str)char *uid_to_name (uid_t uid )char *gid_to_name (gid_t gid )比较ls2的输出与标准的ls对比lLs2中,模式字段、用户名和组名的处理已经完成,但是标准的ls会显示记录总数,l
13、s2不会,而且ls2还没将结果按文件名排序,也不支持选项-a,它还假设参数是目录名。lLs2还有一个致命的问题,不能显示指定目录的信息,例如ls2/tmp。1、set-user-ID位:用于用户更改自己的密码 $ls l /usr / etc/ passwd -rw-r-r- 1 root root 894 Jun 20 19:17 /etc/ passwd 更改密码文件内容会发生变化,但普通用户没有修改文件的权限,只有root用户可以修改, passwd命令怎么修改这个文件? 3.4 3.4 三个特殊的位三个特殊的位Answer :给passwd命令一个特殊的权限,使 passwd命令的文件
14、所有者是root,其特殊属性中包含set-user-ID位. $ ls l/user/bin/passwd -r-sr-xr-x 1 root bin 15725 0ct 31 1997 /usr / bin / passwdl 是否可以更改其它用户的密码?l set-user-ID的其它用处l 检验SUID位的掩码#define S_ISUID 0004000几个问题:几个问题:2、set-group-ID位:用来设置程序运行时所 属组。可以给程序某一个组的访问权限。 #define S_ISGID 0002000 3、sticky位l对于文件而言,早期的UNIX系统经常要在有限的内存中同时
15、运行很多程序,它使用到交换(swap)技术。现在,取而代之的是虚拟内存技术。l从交换空间装载程序要比从普通的硬盘空间快,交换空间上的文件是不分快的。l对于目录而言,sticky位使得目录里的文件只能被创建者删除。l文件与目录l用户与组l文件属性l文件的所有关系l许可权限3.5 3.5 ls小结小结l文件类型 (1)文件类型的建立:在创建文件的时候建立 (2)修改文件类型:文件一经创建,类型就无法修改l许可位与特殊属性位:在文件创建时建立,创建以后,可以被chmod系统调用修改。 (1)建立文件模式 fd = creat (“newfile”, 0744 )3.6 3.6 设置和修改文件的属性设
16、置和修改文件的属性(2)改变文件模式 chmod( “/tmp/myfile”,04764); 函数原型:int result = chmod (char * path , mode_t mode); 返回值:-1 遇到错误 0 成功返回(3)用来修改文件的许可权限和特殊属性的命令l 文件的链接数链接数就是文件被引用的次数。下一章详细讨论。l 文件所有者与组 (1)修改文件所有者与组: chown (“filel” , 200 , 40 ); /*将文件filel的用户ID改为200,组ID改为40*/ (2)用来修改文件所有者和组的命令: shell命令chown和chgrp可以用来修饰文件
17、 所有者和组,详细使用说明参见联机帮助。l文件大小 当向文件添加内容时,文件的大小会自动增加,可以使用系统调用creat把文件大小置为0。不存在能够直接减小文件占有的空间的函数。l 时间 (1)修改最后修改时间和最后访问时间 int utime ( char *path , struct utimbuf * newtimes)参数:path 文件名 newtimes 指向结构变量utimbuf的指针 (2)用命令修改最后修改时间和最后访问时间 shell命令touch可以完成此功能,详细信息参见联机帮助。l 文件名:创建文件时会指定一个文件名。命令mv可以改变一个文件的名字,也可以把文件从一个地方移动到另一个地方。(1)文件名的建立 系统调用creat指定文件模式的同时会指定文件的名字。(2)修改文件名 系统调用rename可以修改文件/目录的名字,还可以移动文件的位置,他又俩个参数,原文件名和新的文件名。rename目标修改文件名或移动文件的位置头文件#include函数原型int result = rename( char * old, char *new)参数old原来的文件名或目录名new新的文件名或目录名返回值-1遇到错误0成功返回小结l主要内容(1)磁盘上有文件和目录,文件和目录都有内容和属性。文件的内容可以是任意的数据,目
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省廉江市实验学校高中政治 8.2 征税和纳税说课稿(必修1)
- 江苏省泗洪县七年级生物上册 第3单元 第5章 人体的物质和能量来源于食物说课稿 (新版)苏科版
- 正式版商业物业租赁合同样本
- 设备采购分期付款合同样本
- 2025年度离婚协议车辆分配与财产分割及子女监护权执行合同
- 中外合资建厂合同(高端汽车零部件生产)
- 度个人房产抵押贷款合同
- 2025年度绿色矿山铁矿石交易合同
- 商业地产买卖合同文本范例
- 2025年度杭州物流企业仓储配送人员劳务派遣合同
- 七上 U2 过关单 (答案版)
- 五年级上册小数递等式计算200道及答案
- 口腔颌面外科:第十六章-功能性外科与计算机辅助外科课件
- 信用证审核课件
- 植物工厂,设计方案(精华)
- 原发性胆汁性肝硬化(PBC)课件
- 贷款新人电销话术表
- 音箱可靠性测试规范
- 社区经济基本内涵及我国社区经济发展现状
- 数据结构ppt课件完整版
- 新北师大版四年级下册小学数学全册导学案(学前预习单)
评论
0/150
提交评论