回复: 我来当版主
int i=0;
for(i=0;i<count;i++)
{
if(argvl==1)
{
convert(&statbuff[i],&ustatbuff[i]);
printf("%30s %8d %-8s %4d %-8s %-8s %-8s\n",
filelist[i],ustatbuff[i].st_size,ustatbuff[i].st_mode,ustatbuff[i].st_nlink,
ustatbuff[i].uname,ustatbuff[i].gname,ustatbuff[i].st_xtime); }
else
{
printf("%s\n" ,filelist[i]);
}
}
if(!argvl)
{
printf("\n");
}
exit(0);
}
char* lower(const char *ptr)
{
char *ret;
int i=0;
ret=malloc(MAXPATH);
for(i=0;i<strlen(ptr);i++)
{
ret[i]=tolower(ptr[i]);
}
ret[i]='\0';
return ret;
}
void strsort(int len, char array[][MAXPATH])
{
char tmp[MAXPATH];
if(array==NULL)
{
printf("array is null.\n");
return;
}
int i=0,j=0;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-i-1;j++)
{
if(strcmp(lower(array[j]),lower(array[j+1])) >= 0)
{
strcpy(tmp,array[j]);
strcpy(array[j],array[j+1]);
strcpy(array[j+1],tmp);
}
}
}
}
int convert(const struct stat *statbuff,struct u_stat *ustatbuff)
{
struct passwd *pwd;
struct group *grp;
if(S_ISREG(statbuff->st_mode))
{
strcat(ustatbuff->st_mode,"-");
}
else if(S_ISDIR(statbuff->st_mode))
{
strcat(ustatbuff->st_mode,"d");
}
else if(S_ISCHR(statbuff->st_mode))
{
strcat(ustatbuff->st_mode,"c");
}
else if(S_ISBLK(statbuff->st_mode))
{
strcat(ustatbuff->st_mode,"b");
}
else if(S_ISFIFO(statbuff->st_mode))
{
strcat(ustatbuff->st_mode,"f");
}
else if(S_ISLNK(statbuff->st_mode))
{
strcat(ustatbuff->st_mode,"l");
}
else
{
strcat(ustatbuff->st_mode,"u");
}
strcat(ustatbuff->st_mode,((statbuff->st_mode&S_IRUSR)?"r":"-"));
strcat(ustatbuff->st_mode,((statbuff->st_mode&S_IWUSR)?"w":"-"));
strcat(ustatbuff->st_mode,((statbuff->st_mode&S_IXUSR)?"x":"-"));
strcat(ustatbuff->st_mode,((statbuff->st_mode&S_IRGRP)?"r":"-"));
strcat(ustatbuff->st_mode,((statbuff->st_mode&S_IWGRP)?"w":"-"));
strcat(ustatbuff->st_mode,((statbuff->st_mode&S_IXGRP)?"x":"-"));
strcat(ustatbuff->st_mode,((statbuff->st_mode&S_IROTH)?"r":"-"));
strcat(ustatbuff->st_mode,((statbuff->st_mode&S_IWOTH)?"w":"-"));
strcat(ustatbuff->st_mode,((statbuff->st_mode&S_IXOTH)?"x":"-"));
pwd=getpwuid(statbuff->st_uid);
grp=getgrgid(statbuff->st_gid);
strcpy(ustatbuff->uname,pwd->pw_name);
strcpy(ustatbuff->gname,grp->gr_name);
ustatbuff->st_nlink=statbuff->st_nlink;
ustatbuff->st_size=statbuff->st_size;
strftime(ustatbuff->st_xtime,MAXPATH,"%m月 %e %R"
,localtime(&(statbuff->st_mtime)));
return 0;
}