do_ls1.c~

来自「实现UNIX下的ls全部功能,同时添加了可以生成目录树.实现内容:1.如何读取目」· C~ 代码 · 共 87 行

C~
87
字号
#include"globals.h"void do_ls1(const char *dir, const struct flg opt_flg){  int n,i,total;  total=0;  struct dirent **namelist;  int maxlen;  if(opt_flg.aflg==3)    print_name1(dir,opt_flg);  else   {      switch(opt_flg.oflg)    {      case 0: n=scandir(dir, &namelist, 0, alphasort);break;      case 1: n=scandir(dir, &namelist, 0, ctimesort);break;      case 2: n=scandir(dir, &namelist, 0, blocksort);break;      case 3: n=scandir(dir, &namelist, 0, mtimesort);break;      case 4: n=scandir(dir, &namelist, 0, atimesort);break;      case 5: n=scandir(dir, &namelist, 0, revalpsort);break;    }        if(n<0)      perror(dir);    else    {       if(opt_flg.aflg==0)        for(i=0; i<n; i++){           if(namelist[i]->d_name[0]!='.')  //不显示'.', '..'和以'.'开头的文件            print_name1(namelist[i]->d_name, opt_flg);          free(namelist[i]);        }        else if(opt_flg.aflg==1)        {          for(i=0;i<n;i++){             print_name1(namelist[i]->d_name, opt_flg);            free(namelist[i]);          }        }        else if(opt_flg.aflg==2)         {          for(i=0;i<n;i++){            if(strcmp(namelist[i]->d_name, ".")!=0&&strcmp(namelist[i]->d_name, "..")!=0)              print_name1(namelist[i]->d_name, opt_flg);            free(namelist[i]);          }        }      printf("\n");      free(namelist);    }  } }void print_name1(const char *dir, const struct flg opt_flg){  struct stat info;  static int n=1;  int m=strlen(dir);  int v=5;  if(stat(dir,&info)==-1)      fprintf(stderr, "Couldn't stat  %s",dir);  if(opt_flg.iflg==1){    printf("%8d ", info.st_ino);    v=3;    m+=9;  }  if(opt_flg.sflg==1){      int blocks;    if(S_ISDIR(info.st_mode))      blocks=4;    else       blocks=getblocks((long)info.st_size);    printf("%4d ",blocks);    v=3;    m+=5;  }  print_filename(dir, info.st_mode);  if(n%v==0)     printf("\n");  else  {    int i;    for(i=0;i<80/v-m;i++)    printf(" ");  }  n++;} 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?