Linux命令實現(3) 簡單的ls

以前以爲寫ls需要遍歷目錄什麼的
看了書才知道只要讀取目錄文件就可以了
裏面保存了此目錄下的所有文件

使用operdir(char *)讀取目錄文件
返回DIR *
readdir(DIR *)
讀記錄 返回一個 struct dirent *
關閉打開目錄closedir(DIR *)

dirent結構體裏的d_name爲文件名

這是一個最簡單的ls

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>

void do_ls(char []);

int main(int argc, char *argv[])
{
  printf("Hello, world!/n");
  if(argc==1)
  {
      do_ls(".");
  }
  else
  {
      while(--argc)
      {
          printf("%s:/n",*++argv);
          do_ls(*argv);
      }
  }


  return EXIT_SUCCESS;
}


void do_ls(char dirname[])
{
    DIR * dir_ptr;
    struct dirent *direntp;
    if((dir_ptr=opendir(dirname))==NULL)
    {
        fprintf(stderr,"ls: cannot open %s/n",dirname);
    }
    else
    {
        while((direntp=readdir(dir_ptr))!=NULL)
            printf("%s/n",direntp->d_name);
        closedir(dir_ptr);
    }
}
發佈了29 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章