当前位置: 首页 > news >正文

用C语言打造自己的Unix风格ls命令

在Unix或类Unix操作系统中,ls是一个非常基础且实用的命令,它用于列出当前目录或指定目录下的文件和子目录。下面,我们将通过C语言编写一个简化的ls命令,展示如何利用dirent.h头文件提供的函数接口实现这一功能。

#include "apue.h"
#include <dirent.h>int main(int argc, char *argv[]) {DIR *dp; // 定义指向目录流的指针struct dirent *dirp; // 定义指向dirent结构体的指针// 检查参数个数,确保传入了一个目录名if (argc != 2)err_quit("Usage: custom_ls directory"); // 使用err_quit宏输出错误信息并退出// 尝试打开指定的目录if ((dp = opendir(argv[1])) == NULL)err_sys("cannot open %s", argv[1]); // 使用err_sys宏输出错误信息并退出// 遍历目录流,直到读取结束while ((dirp = readdir(dp)) != NULL) {// 输出目录条目的文件名printf("%s\n", dirp->d_name);}// 关闭目录流closedir(dp);// 程序正常执行完毕,退出exit(0);
}

```

假设我们已经编译并运行了上述代码,在命令行中可以看到如下交互过程:

root@minos-virtual-machine:~/CLionProjects/unixdemo001# gcc main.c
root@minos-virtual-machine:~/CLionProjects/unixdemo001# ls
a.out  cmake-build-debug  CMakeLists.txt  main.c
root@minos-virtual-machine:~/CLionProjects/unixdemo001# ./a.out ./
a.out
main.c
CMakeLists.txt
.
cmake-build-debug
..
root@minos-virtual-machine:~/CLionProjects/unixdemo001#

通过这段简单的C代码,我们创建了一个能列出指定目录下所有文件和子目录的基本程序。这里apue.h包含了对系统调用和错误处理的一些封装,简化了程序开发。在循环体内,readdir()函数逐个读取目录条目,并通过dirp->d_name获取文件或目录名,将其打印出来。

需要注意的是,此自定义ls命令的功能相比原生ls命令更为简单,未包含诸如排序、权限显示、隐藏文件过滤等额外功能。在实际应用中,若要完全替代ls命令,还需增加更多细节处理。

http://www.lryc.cn/news/321334.html

相关文章:

  • git的起源
  • 软件杯 深度学习 python opencv 火焰检测识别
  • C# double类型计算精度问题解决
  • 基于Springcloud+Vue校园招聘系统 Eureka分布式微服务
  • 【NLP笔记】RNN总结
  • [c++]内存管理
  • k8s通过编排文件,实现服务的滚动更新
  • 安卓面试题多线程 96-100
  • 第二十六章 配置 Web Gateway 的默认参数
  • npm i安装依赖报错,但是cnpm i 却安装成功
  • C语言经典算法-9
  • React 19的变化
  • Kafka整理-Kafka与传统消息队列系统(如RabbitMQ, ActiveMQ)的区别是什么?
  • 汽车电子零部件(8):T_Box
  • 数库据设计最佳实践
  • ESSBAE 数据挖掘
  • 在Linux/Ubuntu/Debian中使用iFuse访问iOS 设备(例如 iPhone 或 iPad)上的文件可双向复制粘贴
  • 驱动开发中的DMA是什么
  • websocket 升级协议时的协议切换点
  • 在Linux中开发C++
  • 【linux】Debian访问Debian上的共享目录
  • Postman Newman API 自动化测试快速入门
  • Python之Web开发中级教程----ubuntu安装MySQL
  • Flutter开发入门——路由
  • Acrobat Pro DC 2023:PDF编辑与管理的全新体验
  • Linux课程_____网络管理
  • ubuntu20.04_PX4_1.13
  • 12350安全生产举报热线系统解决方案
  • Java 多线程(超详细讲解)上篇
  • 15届蓝桥杯备赛(2)