使用C语言模拟Linux系统终端指令ls -l,显示文件详细信息

程序描述:

模拟Linux系统终端指令ls -l,显示文件夹里所有文件详细信息(不包含隐藏文件),包括文件的权限,文件的类型,如果是目录文件里面包含几个目录,系统的登录ID,组ID以及文件的大小,最后修改时间和文件名按照一定顺序排列出来。

需要使用的头文件:

在这里插入图片描述

需要使用的头文件很多,<stdio.h>为基础头文件,还有<string.h>字符串操作头文件,<unistd.h>、<sys/stat.h>、<sys/types.h>、<fcntl.h>四个系统下文件操作函数,同时使用到<time.h>来读取修改文件的时间,<pwd.h>用来获取用户ID,<grp.h>用来获取组ID,<dirent.h>用来获取目录流操作,<stdbool.h>本程序还用到bool类型的分函数。

主函数:

在这里插入图片描述
首先定义一个字符串数组用来存储目录流的文件名,然后定义一个字符类型的空数组,获取文件的路径,然后打开文件,获取目录流并且用字符串数组记录下目录流中的文件名,这些就是该文件下所有文件的文件名,注意目录流里面的文件名有些是只显示一两个点的‘.’,这时候我们需要顺便排除这些‘.‘同时也能屏蔽隐藏文件,隐藏文件的文件名也是以‘.‘开头的。然后是对这些文件按照文件名排序,基本上按照ASCLL码表来排序,除了大写也是按照小写来排序的。运用冒泡法排好序后调用分函数打印。

打印所有数据的分函数

在这里插入图片描述

调用以上分函数打印各文件的详细信息,同时也需要调用各分函数解析文件的信息,才能形成终端上输入ls -l命令打印出来的文件信息那样。以上获取用户ID和组ID已经实现。

解析文件权限的分函数

在这里插入图片描述

首先是获取文件的权限的分函数,根据主函数获取文件权限传过来的m是一串数字,需要根据man手册中stat函数关于文件权限的宏函数比较才能够确定文件的权限,以上就是解析文件权限形成字符串,存入str中并且传回打印函数。

判断文件的属性

在这里插入图片描述

根据ls -l指令显示的文件信息显示,1表示该文件是个普通文件,2表示该文件是个目录文件,3表示该文件为目录文件且文件里有一个目录文件,该文件里面每多一个目录文件则数字加一。以上分函数就是要显示这项功能,显示文件的属性。首先是跟上一个函数一样接收到代表文件的属性的数字,然后与文件属性的宏函数比较,如果该文件是个普通文件则直接返回1,如果不是那么必定是目录文件,那么久需要打开该目录,获取它的目录流,然后查看里面有多少个目录文件,并记录下来,最后关闭目录流并且把数据传给打印函数。

获取文件最后修改时间

在这里插入图片描述

根据打印函数获取的文件修改的时间信息也是一串数字,我们将它做成日期的格式并且存入str字符串中,传回给打印函数。

比较函数以及判断字符是否为大写的函数

在这里插入图片描述

在这里插入图片描述

该分函数是为主函数的判断来准备的,本来打算直接用strcmp函数,但是发现ls -l命令显示出来的文件排序,大写开头的文件也同样按照小写字母来排序,因此只能另外自己写一个判断大小的函数,如果字符串的大写的则把它按照小写来比较大小。

程序运行结果与ls -l比较

在这里插入图片描述

上面是ls -l的命令结果,下面为源代码的运行结果

总结

以上为本程序的所有源代码,但还是存在部分缺陷,比如在显示字体的时候,还没法显示彩色的字体等问题,欢迎随时补充!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值