
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环境下编译执行后结果: 以上是内存溢出为你收集整理的linux环境c/c++实现ls,ls -l全部内容,希望文章能够帮你解决linux环境c/c++实现ls,ls -l所遇到的程序开发问题。 如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。 欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)