一起talk C栗子吧(第七十五回:C语言实例--DIY ls命令)

2024-03-12 05:08

本文主要是介绍一起talk C栗子吧(第七十五回:C语言实例--DIY ls命令),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


各位看官们,大家好,上一回中咱们说的是DIY cd命令的例子,这一回咱们说的例子是:DIY ls命令。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,在Linux系统中,终端提供的ls命令是我们最常用的命令之一,相信大家对它一定很熟悉了。今天,让我们一起来DIY ls命令吧.

下面是具体的操作步骤:

  • 1.使用getcwd函数获取当前工作路径;
  • 2.使用opendir函数打开当前的目录;
  • 3.使用readdir函数读取当前目录中的内容,并且保存到一个数组中;
  • 4.重复步骤3,直到当前目录中所有的内容都被读取为止;
  • 5.使用closedir函数关闭当前的目录;
  • 6.对数组中存放的内容进行排序,使其符合字典顺序;
  • 7.依据ls命令的格式显示数组中的内容;

下面是我们DIY的代码,请大家参考:

int print(char *str)
{char path[PATH_SIZE];char name[PATH_SIZE][PATH_SIZE];char *p;DIR * dir;struct dirent *dir_info;int i =0;memset(path,'\0',PATH_SIZE*sizeof(char) );memset(name,'\0',PATH_SIZE*sizeof(char) );if(NULL == (p=getcwd(path,PATH_SIZE)) )  // 获取当前目录的路径{printf("can't get the current directory \n");return 1;}if(NULL == (dir=opendir(path)) )        //打开当前目录{printf("can't open the directory %s \n",path);return 1;}while(NULL != (dir_info=readdir(dir)) ) //反复读取当前目录中的内容strcpy(name[i++],dir_info->d_name);closedir(dir);                         //关闭当前目录sort_name(name,i);                     //给当前目录中的内容排序// for ls commandif( !strcmp(str,".") )                //根据命令的格式显示目录中的内容{i -= 2; // can't show . and ..in resultwhile(--i>=0)printf("%s \n",name[i]);}// for ls -a commandif( !strcmp(str,"a") ){printf("for ls -a cmd \n");while(--i>=0)printf("%s \n",name[i]);//printf("%d :%s \n",i,name[i]);}return 0;
}

通过查看上面的代码,大家可以发现我们DIY的命令只支持”ls”和”ls -a“这两种命令格式,ls中其它的参数目前还不支持,以后可以再加上,以便进一步完善DIY的ls命令。

上面代码中,没有给出排序函数:sort_name的代码,大家可以从我的资源中下载。该函数使用了冒泡排序算法。大家也可以使用其它的排序算法来实现该排序函数。

上面的代码中,大量使用了字符串相关的函数,如果有哪位看官忘记了字符串相关的函数,可以查看我们前面章回中的内容。这里就不再对字符串操作函数一一进行介绍了。

看官们,正文中就不写代码了,上面是核心的代码,关于排序和其它的代码没有列出来。我把所有的代码整理成了一个文件,并且放到了我的资源中,大家可以点击这里下载使用。此外,该函数需要与前面章回中的main.c和main.h一起配合使用。

下面是程序的运行结果,请大家参考:

|->pwd                  //首先使用pwd命令来显示当前路径
/home/talk8/Shell       //显示当前路径
|->ls                   //输入ls命令,可以查看当前目录中的内容
cd.c 
date.c 
ls.c 
main.c 
main.h 
pwd.c 
s 
|->ls -a               //输入ls -a命令,可以查看当前目录中的内容
.                      //与ls命令相比,ls -a命令多显示了.和..两个隐藏内容
.. 
cd.c 
date.c 
ls.c 
main.c 
main.h 
pwd.c 
s 
|->ls -al            //输入ls -al命令,提示不支持该命令
can't support ls -al command ,please check again 
|->exit              //输入exit命令,退出shell

在显示目录中的内容时,我们为了显示清楚,一个目录占用一行的内容,这点和系统的ls命令不一样。系统提供的ls命令,以空格为间隔进行显示。虽然显示的形式不同,但是显示的内容是相同的。

下面是系统ls命令的进行结果:

$ ls
cd.c  date.c  ls.c  main.c  main.h  pwd.c 
ls -a
.  ..  cd.c  date.c  ls.c  main.c  main.h  pwd.c  s

各位看官,关于DIY ls命令的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。


这篇关于一起talk C栗子吧(第七十五回:C语言实例--DIY ls命令)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/800217

相关文章

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1