Chinaunix

标题: 如何实现linux的ls命令 [打印本页]

作者: yan_zl    时间: 2014-03-18 17:46
标题: 如何实现linux的ls命令
怎么实现linux的ls命令,用opendir readdrir,,不需要带参数功能  -l -a 不需要

如果有人知道可以告诉我吗,谢谢
作者: bikong0411    时间: 2014-03-19 08:53
APUE上有例子,用struct  stat
作者: yan_zl    时间: 2014-03-19 09:04
回复 2# bikong0411


    我知道APUE有例子,,struct  stat是什么意思??可以大概讲讲思路吗
作者: yan_zl    时间: 2014-03-19 09:09
回复 2# bikong0411


    而且我的要求是用opendir和readdir实现的,不需要参数,,只是ls就可以了,然后列出目录以及文件
作者: timespace    时间: 2014-03-19 09:39
你都知道用opendir和readir实现了,还在等什么?等别人直接贴代码?
作者: yan_zl    时间: 2014-03-19 09:55
回复 5# timespace


    我需要的是思路,我知道这两个东西,但是不知道怎么实现。。
作者: MMMIX    时间: 2014-03-19 09:59
回复 6# yan_zl


    这还需要什么思路?

用 opendir 把目录打开,把 readdir 放在循环里面遍历输出就完了。

要实在不会,那就先看看别人是怎么实现的吧,busybox 和 coreutils 里面都有 ls 的实现,前者更简单些。
作者: yan_zl    时间: 2014-03-19 11:12
回复 7# MMMIX

我有看代码,,是不知道如何理解

    int main(int argc, char* argv[])
{
        DIR *dp;
        struct dirent  *dirp;

       if (argc!= 2)
       {
           err_quit();
         }

      if((dp = opendir(argv[1])) == NULL)
      {
          err_sys("can't open %s ", argv[1]);
        }

      while((diep = readdir(dp)) != NULL)
      {
           printf("%s\n", dirp->d_name);
       }

     close(dp);
      exit(0);

}


作者: bfdhczw    时间: 2014-03-19 13:30
这还能理解不了?
作者: yan_zl    时间: 2014-03-19 14:23
回复 9# bfdhczw


   是的。。。
作者: MMMIX    时间: 2014-03-19 16:51
回复 8# yan_zl


    你倒是说说啥地方不理解啊?
作者: xabu    时间: 2014-03-20 06:11
....LZ....
作者: xabu    时间: 2014-03-20 06:12
虽然我是个菜鸟 但是我看懂了这明显是一段C#代码嘛
作者: bikong0411    时间: 2014-03-20 08:48
回复 4# yan_zl


    上面说的很清楚了,opendir , readdir 然后name属性不就好了
作者: yan_zl    时间: 2014-03-20 09:06
回复 9# bfdhczw


    可以告诉我如何理解吗
作者: yan_zl    时间: 2014-03-20 09:29
回复 11# MMMIX


     int main(int argc, char* argv[])
{
        DIR *dp;    <-----DIR是什么
        struct dirent  *dirp; <----dirent???

       if (argc!= 2)
       {
           err_quit();
         }

      if((dp = opendir(argv[1])) == NULL)   <------dp返回什么??
      {
          err_sys("can't open %s ", argv[1]);
        }

      while((diep = readdir(dp)) != NULL)<-----dirp又返回什么
      {
           printf("%s\n", dirp->d_name);<-----d_name从哪里来???
       }

     close(dp);
      exit(0);

}

作者: yan_zl    时间: 2014-03-20 11:45
回复 14# bikong0411


    请看我的代码问题,
作者: yan_zl    时间: 2014-03-20 14:03
回复 12# xabu


    可以帮我看看问题吗
作者: MMMIX    时间: 2014-03-20 19:19
回复 16# yan_zl


    1. DIR 如何定义的你没必要关心,把它当作一个黑盒,只要清楚如何用它就行了;struct dirent 类似。而它们的使用则是作为一些函数的返回值类型或是参数类型。

2. dp 返回什么?你是想问 opendir() 返回什么吧?这个函数返回个 DIR * 类型的指针。具体见 opendir 手册,可通过 man 3 opendir 查看,其余函数类似。

3. d_name 是结构体 struct dirent 的一个成员。这个在 readdir 的手册中有介绍。
作者: yan_zl    时间: 2014-03-26 11:25
回复 19# MMMIX


    你好,,我现在的问题是实现ls命令,,但是不知道为什么显示不了文件夹,,全都是文件的
    这个怎么解决???
作者: MMMIX    时间: 2014-03-28 17:52
回复 20# yan_zl


    你的代码呢?
作者: yan_zl    时间: 2014-03-30 00:18
回复 21# MMMIX


    图片就就是我的代码啊
作者: yan_zl    时间: 2014-03-30 00:22
回复 21# MMMIX


以下是我实现ls的代码,不知道为什么只能列出文件,不能列出文件夹,请告我可以吗
   

   
作者: MMMIX    时间: 2014-03-30 10:27
回复 23# yan_zl


    你不是用 cout << filename->d_name << endl; 输出了 readdir 的结果么,那里面也没有目录么?没有的话那就是你的 tmp_dir 里面没有目录。
作者: yan_zl    时间: 2014-03-30 17:59
回复 24# MMMIX


    就是都是文件啊,,没有文件夹,,明白我意思么。。。请看下面,右下角列出来的都是文件,连文件夹也是文件,我想列出的是文件夹和文件,明白吗


作者: MMMIX    时间: 2014-03-30 22:02
回复 25# yan_zl


    先把你的逻辑理清楚吧。
作者: yan_zl    时间: 2014-03-31 00:12
回复 26# MMMIX


    你这样说什么意思,你直接说你不会就行了。。。
作者: yan_zl    时间: 2014-04-01 11:00
回复 2# bikong0411


    大哥,看一下我的代码好吗?我不知到怎样修改。。
作者: bikong0411    时间: 2014-04-02 08:53
cont << dir << endl;
作者: yan_zl    时间: 2014-04-02 09:53
回复 29# bikong0411


    dir 是指针啊,,打印出来的是地址
作者: yan_zl    时间: 2014-04-02 14:13
回复 21# MMMIX


    ???可以告诉我吗
作者: bikong0411    时间: 2014-04-03 08:41
回复 30# yan_zl


    看错了,S_ISDIR(statbuf.st_mode)用这个判断
作者: yan_zl    时间: 2014-04-03 09:14
回复 32# bikong0411


    我不是已经用了吗,在280行。。
作者: yan_zl    时间: 2014-04-03 09:36
回复 32# bikong0411


    我是不知到为什么显示出来的都是文件,而目录也是显示文件




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2