Chinaunix首页 | 论坛 | 博客
  • 博客访问: 398935
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-03 18:24
文章分类

全部博文(75)

文章存档

2019年(1)

2018年(20)

2017年(14)

2016年(10)

2015年(30)

分类: LINUX

2015-11-17 20:30:57

     ls对于每一个linux的用户来说都不会陌生。

下面看下一个简单的ls的c语言实现:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <dirent.h>

  5. int main(int argc,char **argv)
  6. {
  7.     DIR *dp;
  8.     struct dirent *dirp;

  9.     if(argc != 2)
  10.     {
  11.         printf("usage:%s directory_name\n",argv[0]);
  12.         exit(1);
  13.     }

  14.     dp = opendir(argv[1]);
  15.     if(NULL == dp)
  16.     {
  17.         perror("opendir");
  18.         exit(1);
  19.     }

  20.     while((dirp = readdir(dp)) != NULL)
  21.         printf("%s\n",dirp->d_name);
  22.     
  23.     closedir(dp);

  24.     return 0;
  25. }
编译执行后的结果:

虽然没这样的代码没有linux下面的ls命令那么强大,但是显示目录下的所有的文件还是可以实现的!有兴趣的话,可以深入去研究下linux是如何实现ls命令的!

在上面的代码中,我们看到了两个比较陌生的结构体,下面就来讲解下这两个结构体:

先说下DIR结构体

点击(此处)折叠或打开

  1. struct __dirstream
  2.    {
  3.     void *__fd;
  4.     char *__data;
  5.     int __entry_data;
  6.     char *__ptr;
  7.     int __entry_ptr;
  8.     size_t __allocation;
  9.     size_t __size;
  10.     __libc_lock_define (, __lock)
  11.    };
  12.   
  13. typedef struct __dirstream DIR;
对于DIR结构体,我也不是特别了解,现在也只知道这么点!

来了解下struct dirent结构体:

我们可以通过结构体下的d_name[256]成员来打印目录下文件名或者目录名!
阅读(1849) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~