Linuxls命令ls命令模拟.docx

上传人:b****7 文档编号:16745798 上传时间:2023-07-17 格式:DOCX 页数:38 大小:38.02KB
下载 相关 举报
Linuxls命令ls命令模拟.docx_第1页
第1页 / 共38页
Linuxls命令ls命令模拟.docx_第2页
第2页 / 共38页
Linuxls命令ls命令模拟.docx_第3页
第3页 / 共38页
Linuxls命令ls命令模拟.docx_第4页
第4页 / 共38页
Linuxls命令ls命令模拟.docx_第5页
第5页 / 共38页
Linuxls命令ls命令模拟.docx_第6页
第6页 / 共38页
Linuxls命令ls命令模拟.docx_第7页
第7页 / 共38页
Linuxls命令ls命令模拟.docx_第8页
第8页 / 共38页
Linuxls命令ls命令模拟.docx_第9页
第9页 / 共38页
Linuxls命令ls命令模拟.docx_第10页
第10页 / 共38页
Linuxls命令ls命令模拟.docx_第11页
第11页 / 共38页
Linuxls命令ls命令模拟.docx_第12页
第12页 / 共38页
Linuxls命令ls命令模拟.docx_第13页
第13页 / 共38页
Linuxls命令ls命令模拟.docx_第14页
第14页 / 共38页
Linuxls命令ls命令模拟.docx_第15页
第15页 / 共38页
Linuxls命令ls命令模拟.docx_第16页
第16页 / 共38页
Linuxls命令ls命令模拟.docx_第17页
第17页 / 共38页
Linuxls命令ls命令模拟.docx_第18页
第18页 / 共38页
Linuxls命令ls命令模拟.docx_第19页
第19页 / 共38页
Linuxls命令ls命令模拟.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Linuxls命令ls命令模拟.docx

《Linuxls命令ls命令模拟.docx》由会员分享,可在线阅读,更多相关《Linuxls命令ls命令模拟.docx(38页珍藏版)》请在冰点文库上搜索。

Linuxls命令ls命令模拟.docx

Linuxls命令ls命令模拟

Linux-ls命令模拟

//

//ls.c

//wxd

//

//createbyjneeyouon15/11/13

//Copyright(c)2015wxd.Allrightsreserved.

//

#include

#include

#include

#include"ls_fileHandle.h"

 

/**主函数**/

intmain(intargc,char*argv[])

{

intmask=0;

boolret=false;

freopen(".err.dat","wb",stderr);

if(!

init())

{

return-1;

}

mask=getCmdLineArgs(argc,argv);

if(mask==-2)//--help命令

{

getHelpMenu();//显示帮助

}

elseif(mask==ERROR)

{

printf("参数有误,输入\"./ls--help\"查看帮助\n");

}

else//其他命令

{

setMaskArray(mask);

ret=getDirInfo(".",0);

if(!

ret)

{

printf("参数有误,输入\"./ls--help\"查看帮助\n");

}

freeMem();

}

system("rm-f.err.dat");

return0;

}

 

//

//ls_fileHandle.h

//wxd

//

//createbyjneeyouon15/11/13

//Copyright(c)2015wxd.Allrightsreserved.

//

#ifndef__LS_FILE_HANDLE_H__

#define__LS_FILE_HANDLE_H__

 

//定义bool型

#if!

defined(bool)

#defineboolchar

#definetrue1

#definefalse0

#endif

#ifndefERROR

#defineERROR-1

#endif

 

#ifdefined(__STDC__VERSION__)&&(__STDC__VERSION__>=199901L)

//@desc宏函数,输出文件信息

#defineprintf_c(fontBgColor,fontColor,format,args...)printf("\033[fontBgColor;fontColormformat\033[0m",args)

#else

//@desc输出文件信息

//带颜色输出,可设置字体颜色和字体背景颜色

externintprintf_c(charfontBgColor,charfontColor,constchar*format,...);

#endif

 

//@desc获取命令行参数,返回掩码值

externintgetCmdLineArgs(intargc,char*argv[]);

 

//@desc设置掩码数组

//@ret成功返回true,否则返回false

externboolsetMaskArray(intmaskValue);

 

//@desc获得文件信息

//@ret成功返回true,否则返回false

externboolgetFileInfo(constchar*dirName,constchar*fileName,unsignedintindex);

 

//@desc获得目录信息

//@ret成功返回true,否则返回false

externboolgetDirInfo(constchar*dirName,intdirLevel);

 

//@desc获得帮助菜单

externvoidgetHelpMenu();

 

//@desc释放内存

voidfreeMem();

 

//@desc初始化

boolinit();

#endif//__LS_FILE_HANDLE_H__

 

//

//ls_fileHandle.c

//wxd

//

//createbyjneeyouon15/11/13

//Copyright(c)2015wxd.Allrightsreserved.

//

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

 

#ifndefERROR

#defineERROR-1

#endif

#defineOK0

#defineNUL_POINTERNULL

//定义bool,true,false

#ifndefbool

#defineboolchar

#definetrue1

#definefalse0

#endif

//帮助文件名

#defineHELP_FILE"helpInfo.dat"

#defineTMP_FILE".tmp~"

//定义errno_t型

#defineerrno_tint

//定义文件类型

#defineblock_file'b'

#definedirect_file'd'

#definespec_char_file'c'

#definefifo_device'p'

#defineregular_file'-'

#definelink_file'l'

#definesocket_file's'

#defineBFblock_file//块文件

#defineDFdirect_file//目录文件

#defineCFspec_char_file//特殊字符文件

#defineFDfifo_device//FIFO设备

#defineRFregular_file//普通文件

#defineLFlink_file//符号链接文件

#defineSFsocket_file//scoket文件

//文件名最大长度

#defineMAX_FILE_NAME512

//最多子目录个数

#defineMAX_SUB_DIR100

//背景色

typedefstructBG_COLOR

{

constcharBLACK;//黑

constcharDARKRED;//深红

constcharGREEN;//绿

constcharYELLOW;//黄

constcharBLUE;//蓝

constcharPURPLE;//紫

constcharDARKGREEN;//深绿

constcharWHITE;//白

constcharDEFAULT;//默认

}bgColor;

//文字背景色

staticconstbgColorfont_bgColor={40,41,42,43,44,45,46,47,0};

 

//前景色

typedefstructFG_COLOR

{

constcharBLACK;//黑

constcharRED;//红

constcharGREEN;//绿

constcharYELLOW;//黄

constcharBLUE;//蓝

constcharPURPLE;//紫

constcharDARKGREEN;//深绿

constcharWHITE;//白

constcharDEFAULT;//默认

}fgColor;

//文字颜色

staticconstfgColorfont_fgColor={30,31,32,33,34,35,36,37,0};

 

//文件信息结构体

typedefstructFile_Info

{

ino_tino;//节点号

chartype;//类型

charperm[10];//权限

nlink_tnlink;//硬链接数

charuname[32];//用户名

chargname[32];//所属组名

off_tsize;//大小

time_tmtime;//最后修改时间

charname[32];//文件名

charlname[32];//链接的文件名

charnameColor;//名字颜色

charlnameColor;//链接文件颜色

}fileInfo;

#defineMAX_FILE_NUM100

//文件信息结构体数组

staticfileInfo*m_fileInfo=NULL;

//已分配空间

staticunsignedintALLOC_MEM_LEN=0;

/////////////////////////////////////全局变量///////////////////////////////////////////////

//掩码数组,根据每位元素值是否为1选择获取文件哪些

//信息,每位元素对应一个ls命令参数,对应关系如下:

//maskArray[0]-->-l

//maskArray[1]-->-a

//maskArray[2]-->-R

//maskArray[3]-->-r

//maskArray[4]-->-d

//maskArray[5]-->-i

//maskArray[6]-->-S(大写S)

//maskArray[7]-->-t

//maskArray[8]-->-m

//maskArray[9]-->-1(数字1)

//maskArray[10]-->--help

//maskArray[11]-->无参数

//maskArray[12...15]-->保留

staticunsignedcharmaskArray[16]={0};

//掩码数组有效长度

#defineVALID_LEN_ARRAY10

//保存外部输入的文件名

staticcharfileName[128][20]={""};

//外部文件数目

staticintextFileNums=0;

 

//////////////////////////////////////////////////////////////////////////////////////////////

/////////------------------------------------函数实现---------------------------------////////

/////////////////////////////////////////////////////////////////////////////////////////////

 

//检查参数

errno_tcheckArgement(chararg)

{

staticconstcharallArgs[]={'l','a','R','r','d','i','S','t','m','1'};

intlen=strlen(allArgs);

inti=0;

for(i=0;i

{

if(arg==allArgs[i])returni;

}

returnERROR;

}

 

//安全拷贝

errno_tstrcpy_s(char*_Dst,size_t_SizeInBytes,constchar*_Src)

{

char*ret=NULL;

if(strlen(_Src)>_SizeInBytes)

{

returnERROR;

}

ret=strcpy(_Dst,_Src);

if(ret==NULL)returnERROR;

returnOK;

}

 

//安全打开

errno_tfopen_s(FILE**_File,constchar*_Filename,constchar*_Mode)

{

*_File=fopen(_Filename,_Mode);

if(*_File==NULL)returnERROR;

returnOK;

}

 

//安全输出

errno_tvsprintf_s(char*_DstBuf,size_t_SizeInBytes,constchar*_Format,va_list_ArgList)

{

errno_tret=vsnprintf(_DstBuf,_SizeInBytes,_Format,_ArgList);

returnret;

}

 

//获取命令行参数,返回掩码值

intgetCmdLineArgs(intargc,char*argv[])

{

intmaskValue=0x0000;

intfileCount=0;

inti=0;

for(i=1;i

{

if(!

strcmp(argv[i],"--help"))

{

return-2;

}

elseif(argv[i][0]=='-')

{

intlen=strlen(argv[i]);

intret=ERROR;

while(--len)

{

ret=checkArgement(argv[i][len]);

if(ret==ERROR)returnERROR;

maskValue|=(0x0001<

}

}

else

{

strcpy_s(fileName[fileCount++],sizeof(fileName[0]),argv[i]);

}

}

extFileNums=fileCount;

returnmaskValue;

}

 

//设置掩码数组

boolsetMaskArray(intmaskValue)

{

longtmp=0x10000;

inti=15;

memset(maskArray,0,sizeof(maskArray));

if(maskValue==0)

{

maskArray[11]=1;

returntrue;

}

while(!

((tmp>>=1)&maskValue)&&tmp>0)i--;

while(tmp>0)

{

if(tmp&maskValue)

{

maskArray[i--]=1;

}

else

{

maskArray[i--]=0;

}

tmp>>=1;

}

returntrue;

}

 

#if!

(defined(__STDC__VERSION__)&&__STDC__VERSION__>=199901L)

//@desc宏函数,带颜色输出,#format,将format对应的参数字符串化(为变量名时,不是变量中的值,而是变量名)

#definePRINT_BY_COLOR(fontBgColor,Bold,fontColor,format,argsValue)printf("\033[%d;%02d;%dm"#format"\033[0m",fontBgColor,Bold,fontColor,argsValue)

//输出文件信息

intprintf_c(charfontBgColor,charfontColor,constchar*format,...)

{

staticcharprintf_buf[1024];

va_listargs;

intn=0;

intbold=0;

va_start(args,format);

n=vsprintf_s(printf_buf,sizeof(printf_buf),format,args);

va_end(args);

if(fontBgColor<40||fontBgColor>47)

{

fontBgColor=font_bgColor.DEFAULT;

}

if(fontColor<30||fontColor>37)

{

fontBgColor=font_fgColor.DEFAULT;

}

if(fontColor==font_fgColor.BLACK)

{

bold=0;

}

PRINT_BY_COLOR(fontBgColor,bold,fontColor,"%s",printf_buf);

returnn;

}

#endif

 

//通过uid获得用户名

char*getUnameByUid(uid_tuid)

{

structpasswd*m_pw;

staticcharname[20]="";

m_pw=getpwuid(uid);

if(m_pw==NULL)

{

returnNUL_POINTER;

}

strcpy_s(name,sizeof(name),m_pw->pw_name);

returnname;

}

 

//通过gid获得组名

char*getGnameByGid(gid_tgid)

{

structgroup*m_gr;

staticcharname[20]="";

m_gr=getgrgid(gid);

if(m_gr==NULL)

{

returnNUL_POINTER;

}

strcpy_s(name,sizeof(name),m_gr->gr_name);

returnname;

}

 

//获取符号链接链接的文件名

boolgetFileNameBySLink(char*sLinkName,char*buf,size_tbufSize)

{

intlen=0;

len=readlink(sLinkName,buf,bufSize);

buf[len]='\0';

if(len>bufSize)

{

perror("文件名过长,已被截取.");

}

returntrue;

}

 

//获取文件访问权限

char*getFileAccePermis(mode_tst_mode)

{

staticcharperm[9]="";

charpermValue[4]="xwr-";

inti=0,len=9;

for(i=0;i

{

if(st_mode&(0x1<

{

perm[len-i-1]=permValue[i%3];

}

else

{

perm[len-i-1]=permValue[3];

}

}

returnperm;

}

 

//获取文件类型

chargetFileType(mode_tst_mode)

{

switch(st_mode&S_IFMT)

{

caseS_IFBLK:

returnBF;

caseS_IFDIR:

returnDF;

caseS_IFCHR:

returnCF;

caseS_IFIFO:

returnFD;

caseS_IFREG:

returnRF;

caseS_IFLNK:

returnLF;

caseS_IFSOCK:

returnSF;

default:

returnERROR;

}

}

 

//通过文件类型获得文件名颜色

chargetFileColorByType(constchar*fileName,chartype)

{

charcmd[3][512];

charret=font_fgColor.BLACK;

if(type==DF)returnfont_fgColor.BLUE;

if(type==LF)returnfont_fgColor.DARKGREEN;

if(access(fileName,X_OK)==0)returnfont_fgColor.GREEN;

//测试是否为压缩文件

if(!

system("mkdirtmp~"))

{

sprintf(cmd[0],"tar-xf%s-Ctmp~",fileName);

sprintf(cmd[1],"tar-xzf%s-Ctmp~",fileName);

sprintf(cmd[2],"tar

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2