linux环境c/c++实现ls,ls -l
My_ls.cpp //============================================================================ // Name : Hellocpp.cpp // Author : lingo // Version : // Copyright : Your copyright notice // Description : Hello World in C++,Ansi-style //============================================================================ #include #include #include #include #include #include #include #include #include #include #include using namespace std; char filename[100][255]; //存储文件名字符串 int filenum = 0; // 将文件权限描述id转换为读写权限字符 void stmode_to_rwx(int mode,char str[]){ strcpy(str,"----------"); if (S_ISDIR(mode)) str[0] = 'd'; if (S_ISCHR(mode)) str[0] = 'c'; if (S_ISBLK(mode)) str[0] = 'b'; if ((mode & S_IRUSR)) str[1] = 'r'; if ((mode & S_IWUSR)) str[2] = 'w'; if ((mode & S_IXUSR)) str[3] = 'x'; if ((mode & S_IRGRP)) str[4] = 'r'; if ((mode & S_IWGRP)) str[5] = 'w'; if ((mode & S_IXGRP)) str[6] = 'x'; if ((mode & S_IROTH)) str[7] = 'r'; if ((mode & S_IWOTH)) str[8] = 'w'; if ((mode & S_IXOTH)) str[9] = 'x'; } int ls_dir(char *dirpath){ DIR *d; //DIR *opendir(const char *pathname),目录的返回结构体指针 struct dirent *dirfile; //用该结构体保存目录项 struct stat dirfileinfo; //目录项描述结构体 if(!(d = opendir(dirpath))){ printf("error opendir %sn",dirpath); return -1; } while((dirfile = readdir(d))!= NULL){ // 过滤.xx目录项 if(strncmp(dirfile->d_name,".",1) == 0) continue; stat(dirfile->d_name,&dirfileinfo); cout< } cout< closedir(d); return 1; } int ls_l_dir(char *dirpath){ DIR *d; //DIR *opendir(const char *pathname),目录的返回结构体指针 struct dirent *dirfile; //用该结构体保存目录项 struct stat dirfileinfo; //目录项描述结构体 if(!(d = opendir(dirpath))){ printf("error opendir %sn",dirpath); return -1; } struct passwd *userinfo; struct group *groupinfo; while((dirfile = readdir(d))!= NULL){ // 过滤.xx目录项 if(strncmp(dirfile->d_name,1) == 0) continue; strcpy(filename[filenum++],dirfile->d_name); //存储目录项名称 stat(dirfile->d_name,&dirfileinfo); //得到指定文件名的描述信息 userinfo = getpwuid(dirfileinfo.st_uid); groupinfo = getgrgid(dirfileinfo.st_gid); char dirauth[11]; stmode_to_rwx(dirfileinfo.st_mode,dirauth); cout< printf(" %.12s",4 + ctime(&dirfileinfo.st_mtime)); cout<<" "< cout< } closedir(d); return 1; } int main(int args,char* argv[]) { char pwddir[255]; //存储当前工作环境下绝对路径 getcwd(pwddir,255); //得到当前工作环境绝对路径 if( args > 1){ //printf("your command : ./ %s,%s",argv[0],argv[1]); int i =2; if(memcmp(argv[1],"-l",i)==0){ ls_l_dir(pwddir); //遍历当前工作环境路径下 }else{ printf("Usage:%s -l n",argv[0]); } }else{ ls_dir(pwddir); } return 0; } ubuntu环境下编译执行后结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |