1.思维导图
2.作业
将指定目录下所有文件的属性显示出来,类似 ls -l 一个指定目录
打开目录,
读取目录中的文件名
将路径和文件名拼接
传入给stat获取文件属性
#include<myhead.h> //文件的类型及其权限 void get_filepermission(mode_t m) {/* int i=0; int q=0400;//char str[4]="rwx"; for(i=0;i<9;i++)//循环右移1位 { if((m&q)==0)//无权限 { putchar('-'); //代码优化putchar(str[i%3]); break; } else if((m&q)!=0)//有权限添加r、w、x、 { switch(i%3)//得出0,1,2 { case 0 ://036 putchar('r'); break; case 1 ://147 putchar('w'); ----------错误代码 break; case 2 ://258 putchar('x'); break; } } q=q>>1; }*/ char buf[]="rwx"; for(int i=0;i<9;i++) { if( (m & (0400)>>i) == 0) { putchar('-'); continue; } printf("%c",buf[i%3]); } putchar(' '); return; } //获取文件类型 void get_filetype(mode_t m) { if(S_ISREG(m)) putchar('-'); else if(S_ISDIR(m)) putchar('d'); else if(S_ISCHR(m)) putchar('c'); else if(S_ISBLK(m)) putchar('b'); else if(S_ISFIFO(m)) putchar('p'); else if(S_ISLNK(m)) putchar('l'); else if(S_ISSOCK(m)) putchar('s'); } int main(int argc, const char *argv[]) { DIR* dp=opendir("./");//打开一个目录 if(NULL==dp) { ERR_MSG("opendir");//判断是否打开成功 return -1; } printf("目录打开成功\n"); struct dirent *rp=NULL; while(1) { struct dirent *rp=readdir(dp); if(NULL==rp) { break; } //获取文件属性 struct stat buf; if(stat(rp->d_name,&buf)<0) { ERR_MSG("stat"); return -1; } //获取文件的类型及其权限 get_filetype(buf.st_mode); get_filepermission(buf.st_mode); //文件的硬链接数 printf("%ld ",buf.st_nlink); //文件所属用户的id号 struct passwd* pwd=getpwuid(buf.st_uid); if(NULL==pwd) { ERR_MSG("getpwuid"); return -1; } printf("%s ",pwd->pw_name); struct group* grp=getgrgid(buf.st_gid); if(NULL==grp) { ERR_MSG("getgrgid"); return -1; } printf("%s ",grp->gr_name); //文件的大小 printf("%ld\t ",buf.st_size); //将秒数转换成年月日 // time_t t2=buf.st_mtime; // struct tm* info =NULL; // { time(&t2);//time_t *tloc=&t2; // info = localtime(&t2); //时间 struct tm* info=NULL; info=localtime(&buf.st_mtime); printf("%d月 %d %02d:%02d ",\ info->tm_mon+1,info->tm_mday,\ info->tm_hour,info->tm_min); printf("%s\n",rp->d_name); } putchar(10); return 0; }
熬不住了先交作业