Linux编程实战读书笔记 第3章

本章基于目录和文件属性进行展开,最后编写ls。

1、ls命令

ls命令用于查看指定或当前目录下文件及其信息,使用情况如图所示:

写一个ls的问题:

1.如何列出目录的内容

2.如何读取并显示文件的属性

3.给出一个名字,如何判断它是目录还是文件

文件树,磁盘上的文件和目录被组成一颗目录树,每个节点都是目录或文件,如图所示:

2.ls如何工作的

工作流程大致是:

目录是一种特殊的文件,内容是文件和目录的名字,与utmp类似。是否能用什么函数读取目录里的内容呢,使用命令man -k direct | grep read

这样就能获得所有读目录的函数了。可以看到readdir就应该是我们所需要的,man 3 readdir就可以看到该函数的帮助了,其中还有个readdir(2)函数,是获取全部目录,我们只要获取目录信息就可以了,选择readdir(3)。

该函数描述中返回一个目录信息结构体指针。同样在man -k direct中还有打开opendir,关闭closedir函数.

跟着文中进行编写,编写出个基本的就是单纯能够展示本地文件名称.最初效果如图所示:

这时候并不能过滤.和..,同时书中希望的效果与ls -l命令相类似,如图所示:

在ls -l中前面的是文件类型和权限,而这个信息是保存在stat结构体的st_mode中,该参数是16bit,最高的4字节是文件类型,接下来3bit是文件的特殊属性,最后9bit是3种用户的权限,分别为文件所有者、同组用户和其他用户。每组3bit分别是读、写和执行的权限,结构如图所示:

在sys/stat.h头文件中都会有相应的宏对这些位进行判断,ubuntu中头文件位置已经改变,通过find命令查找相关头文件,find /usr/include -name stat.h这样在/usr/include中进行搜索如图所示:

图中第一个文件应该是我们需要的,使用more命令查看其头文件内容

这些在之后编程判断其类型权限时都是需要用到的。如图所示是转换函数:

接着还有文件用户名、用户组的名称转换,如图所示是相关头文件

最后我解决了大部分的问题,代码在gitee中,结果没有排序和数量,这个弄个数组排序就可以了,这边我就没弄,结果如图所示:

ls -l /tmp对比:

之后可能会在课后练习中将其完善。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值