#include <head.h>
int get_filePerrmison(mode_t mode)//获取文件权限
{char per[] ="rwx";for(int i=0;i<9;i++){if((mode&(0400>>i))==0){putchar('-');continue;}putchar(per[i%3]);}}
int get_fileType(mode_t m) //获取文件类型
{switch(m&S_IFMT){case S_IFSOCK: putchar('s');break;case S_IFLNK: putchar('l');break;case S_IFREG: putchar('-');break;case S_IFBLK: putchar('b');break;case S_IFDIR: putchar('d');break;case S_IFCHR: putchar('c');break;case S_IFIFO: putchar('p');break;}}int main(int argc, const char *argv[])
{printf("请输入目录名:\n");char arr[50]="";scanf("%s",arr);char tmp[50]="";strcpy(tmp,arr);DIR* dirp=opendir(arr);if(NULL==dirp){ERR_MSG("opendir");return -1;}struct dirent*rp=NULL;//读取路径下目录while(1){bzero(arr,sizeof(arr));strcpy(arr,tmp);rp =readdir(dirp);if(NULL==rp){if(0==errno){break;}else{ERR_MSG("readdir");}}if('.'==rp->d_name[0]){continue;}struct stat buf;if(stat(strcat(arr,rp->d_name),&buf)<0){ERR_MSG("open");return -1;}struct tm* t;t=localtime(&buf.st_ctime);get_fileType(buf.st_mode);//提取文件类型get_filePerrmison(buf.st_mode);//提取文件权限printf(" %5lu",buf.st_nlink);//打印硬链接个数struct passwd *pwd=getpwuid(buf.st_uid);if(NULL==pwd){ERR_MSG("getpwuid");return -1;}int m=sizeof(pwd->pw_name);printf(" %-*s",m,pwd->pw_name);struct group *grp=getgrgid(buf.st_gid);if(NULL==grp){ERR_MSG("getgrgid");return -1;}m=sizeof(grp->gr_name);printf(" %-*s",m,grp->gr_name);m=sizeof(buf.st_size)-1;printf("%*ld",m,buf.st_size);char *month_ch[]={"一","二","三","四","五","六","七","八","九","十","十一","十二"};printf(" %s月",month_ch[t->tm_mon]);printf(" %02d %02d:%02d",t->tm_mday,t->tm_hour,t->tm_min);printf(" %s",rp->d_name);putchar(10);}return 0;}