• 大小: 6KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: 其他
  • 标签: ls  

资源简介

ls命令实现,实现了ls -l,-i,-a,-t,-R等功能,能对绝对路径进行ls查询

资源截图

代码片段和文件信息

#include   
#include   
#include   
#include   
#include   
#include   
#include   
#include 
int flag[10];
void myls(char dir[] int flag[]);
int para2num(int flag[] char str[]);
void display(char filename[]struct stat* info_p);
void quicksort(struct stat infos[]  char (*files)[100] int low int high);
int partition(struct stat infos[]  char (*files)[100] int low int high);
int main(int argc char **argv)
{
if (argc == 1) myls(“.“ flag);
else
{
int i = 1;
if (argv[1][0] == ‘-‘)
{
para2num(flag argv[1]);
i++;
}
if (i==argc) myls(“.“ flag);
else
{
int j = argc - i;
for (; i < argc; i++)
{
if (j>= 2) printf(“%s:\n“argv[i]);
myls(argv[i] flag);
}
}
}
return 0;
}
int para2num(int flag[] char str[])
{
int i;
for (i = 1; i < strlen(str); i++)
{
switch (str[i])
{
case ‘a‘:flag[0] = 1; break;
case ‘l‘:flag[1] = 1; break;
case ‘i‘: flag[2] = 1; break;
case ‘R‘:flag[3] = 1; break;
case ‘t‘:flag[4] = 1; break;
}

}
}
void myls(char dir[] int flag[])
{
DIR *mydir;
struct stat info;
lstat(dir &info);
struct dirent* direntp;
if (S_ISDIR(info.st_mode))
{
if ((mydir = opendir(dir)) == NULL)
{
fprintf(stderr “myls: cannot open %s \n“ dir);
}
char dirs[20][100];
int dir_count = 0;
char files[100][100];
int file_count = 0;
struct stat infos[100];
while ((direntp = readdir(mydir)) != NULL)
{
char filename[100];
strcpy(filename dir);
if(strcmp(dir“/“))  strcat(filename “/“);
strcat(filename direntp->d_name);
lstat(filename &info);
if (flag[0] == 0 && direntp->d_name[0] == ‘.‘) continue;//-a
if (flag[3] == 1)//-r
{
if (S_ISDIR(info.st_mode))
{
strcpy(dirs[dir_count] filename);
dir_count++;
}
}
if (flag[4] == 1)
{
strcpy(files[file_count] direntp->d_name);
infos[file_count] = info;
file_count++;
}
else
{
if (flag[2] == 1) printf(“%-10ld\t“ direntp->d_ino);//-i
if (flag[1] == 1)
{
stat(filename &info);
display(filename &info);
}//-l

printf(“%-8s“ direntp->d_name);
if (flag[1]) printf(“\n“);
else printf(“\t“);
}
}
closedir(mydir);
if (flag[4] == 1)
{
int i = 0;
quicksort(infos files 0 file_count - 1);
for (; i < file_count; i++)
{
if (flag[2] == 1) printf(“%-10ld\t“infos[i].st_ino);//-i
if (flag[1] == 1)
{
stat(files[i] &infos[i]);
display(files[i] &infos[i]);
}//-l
printf(“%-8s“ files[i]);
if (flag[1]) printf(“\n“);
else printf(“\t“);
}

}
printf(“\n“);
if (flag[3])//-r
{
int i = 0;
for (; i < dir_count; i++)
{

评论

共有 条评论