加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

linux环境c/c++实现ls,ls -l

发布时间:2020-12-15 04:49:44 所属栏目:百科 来源:网络整理
导读:My_ls.cpp //============================================================================ // Name : Hellocpp.cpp // Author : lingo // Version : // Copyright : Your copyright notice // Description : Hello World in C++,Ansi-style //==========

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<d_name<<" ";

}

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<pw_name<<" "<gr_name<<" "<

printf(" %.12s",4 + ctime(&dirfileinfo.st_mtime));

cout<<" "<d_name;

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环境下编译执行后结果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读