命令框中ls -l 可以显示文件详细信息
怎么样用C语言实现该功能?????
源码如下:
#include <sys/types.h> #include <dirent.h> #include <stdio.h> #include <sys/stat.h> #include <unistd.h> #include <time.h> #include <string.h> char fun1(mode_t a); void fun2(mode_t a); void fun3(struct timespec a); int main() { char mulu[30]={0}; printf("输入要查看的目录\n"); gets(mulu); DIR* p=opendir(mulu); if(p==NULL) { printf("err2\n"); perror("opendir\n"); } struct dirent*dir=NULL; while(dir=readdir(p)) { struct stat info={0}; char buf[30]={0}; sprintf(buf,"%s/%s",mulu,dir->d_name);//字符串的拼接 int flag=stat(buf,&info); if(flag==-1) { printf("err1"); perror("stst"); return 0; } printf("%c ",fun1(info.st_mode));//文件类型 fun2(info.st_mode);//权限 printf("%ld\t",info.st_nlink);//连接数 printf("%ld\t",info.st_size);//大小 fun3(info.st_mtim);//时间(月日时) printf("%s\n",dir->d_name);//文件名 } closedir(p); return 0; } char fun1(mode_t a) { switch(a&S_IFMT) { case S_IFBLK: return 'b'; break; case S_IFCHR: return 'c'; break; case S_IFDIR: return 'd'; break; case S_IFIFO: return 'p'; break; case S_IFLNK: return 'l'; break; case S_IFREG: return '-'; break; case S_IFSOCK:return 's'; break; default:'?'; break; } } void fun2(mode_t a) { char temp[10]={"---------"}; if(a&S_IRUSR) temp[0]='r'; if(a&S_IWUSR) temp[1]='w'; if(a&S_IXUSR) temp[2]='x'; if(a&S_IRGRP) temp[3]='r'; if(a&S_IWGRP) temp[4]='w'; if(a&S_IXGRP) temp[5]='x'; if(a&S_IROTH) temp[6]='r'; if(a&S_IWOTH) temp[7]='w'; if(a&S_IXOTH) temp[8]='x'; printf("%s ",temp); } void fun3(struct timespec a) { struct tm* tm=localtime(&a); printf("%d月 %d %d:%d ",tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min); }