您的位置:首页 > 运维架构 > Linux

linux课上作业-带排序的ls显示命令

2011-10-31 17:33 337 查看
#include<stdio.h>

#include<sys/types.h>

#include<dirent.h>

#include<string.h>

#include<malloc.h>

#define max 99

int sort_function(char *a,char *b)

{

   return(strcmp(a,b));

}

void qsort(char *a[],int low,int high)

{

     int i=low,j=high;

     char *temp=a[low];

     while(i<j)

     {

    while(i<j&&sort_function(temp,a[j])<=0)j--;//在数组的右端扫描

    if(i<j){a[i]=a[j];i++;}

    while(i<j&&sort_function(a[i],temp)<0)i++;//在数组左端扫描

    if(i<j){a[j]=a[i];j--;}

     }

     a[i]=temp;

     if(low<i) qsort(a,low,i-1);

     if(i<high) qsort(a,j+1,high);

}

void do_ls(char *dirname)

{

    DIR *dir_ptr,*dir_ptr1;

    struct dirent *direntp,*direntp1;

    int count = 0;

     char *a[max],*p;

    if((dir_ptr=opendir(dirname))==NULL)

    fprintf(stderr,"ls1:cannot open %s\n",dirname);

    else

    {

        while((direntp=readdir(dir_ptr))!=NULL)

    {++count;

        p=direntp->d_name;

    a[count-1]=p;

    }

    qsort(a,0,count-1);

    for(int i=0;i<count;i++)

    {

         printf("%s\n",a[i]);    

    }

    closedir(dir_ptr);

    }

}

int main(int ac,char *av[])

{

    char a[]={"."};

    if(ac==1)

        do_ls(a);

    else

        while(--ac)

        {

            do_ls(*av);

        }

}

该测试程序与源程序的不同点是会把隐藏文件也输出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息