- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第
C++实现简单的ls命令及其原理
目录思维导图准备工作对控制参数的处理对dir参数的处理函数实现实现完整代码总结
思维导图
准备工作
对控制参数的处理
一共有7个可选参数,分别是-a、-l、-R、-t、-r、-i、-s,这些参数可以相互自由组合,因此可以设计一种机制,就是直接把它们全部用循环一次性做或运算,得到一个参数标记Vec。
//标记:-a、-l、-R、-t、-r、-i、-s参数(向量分量)
#definea0b1000000
#definel0b0100000
#defineR0b0010000
#definet0b0001000
#definer0b0000100
#defineI0b0000010
#defines0b0000001
//向量
intVec=0;
而Vec可以使用全局变量,这样可以避免写函数时不断地给函数参数加入地址参数,使得更加代码整洁,更直观。
对dir参数的处理
同理,依然可以设计一个全局容器,不断地把dirname扔进去:
char*dirname[4096*128];
intdirlen=0;
而对于filename也是一样的,但在每次遍历一个dir之前,就得filename容器做重置处理:
char*filenames[4096*128];
intfile_cnt=0;
函数实现
voidtags_cal(intargc,char*argv[]){
for(inti=1;iargc;i++){
if(argv[i][0]!=
-){//只接受以-开头的参数,其它参数要么错误,要么是文件夹名称或文件名
char*tempdirname=(char*)malloc(sizeof(char)*4096);
strcpy(tempdirname,argv[i]);
dirname[dirlen++]=tempdirname;
}else{
intlen=strlen(argv[i]);
for(intj=1;jlen;j++){
switch(argv[i][j]){
casea:
Vec|=a;
break;
casel:
Vec|=l;
break;
caseR:
Vec|=R;
break;
caset:
Vec|=t;
break;
caser:
Vec|=r;
break;
casei:
Vec|=I;
break;
cases:
Vec|=s;
break;
default:
fprintf(stderr,%c参数错误!\n,argv[i][j]);
break;
if(dirlen==0){
dirlen=1;
char*tempdirname=(char*)malloc(sizeof(char)*2048);
strcpy(tempdirname,.);
dirname[0]=tempdirname;
}
这里需要注意的是,如果dirlen==0,说明我们的命令并没有加参数,默认是对当前文件夹进行操作,因此需要重新对dirlen赋值为1,然后把dirname[0]置为.。
实现
我们上一步成功得到了,dirnname、dirlen,这样就可以逐个dirname[i]进行处理了!
voiddo_myls(){
for(inti=0;idirlen;i++){
if(do_name(dirname[i])==-1){
continue;
//且自动字典排序
if((Vect)==t){//时间排序
do_t(filenames);
if((Vecr)==r){//逆序
do_r(filenames,file_cnt);
printf(当前路径:\%s\\n,dirname[i]);
inttag=0;//换行
for(intj=0;jfile_cnt;j++){
//拼凑文件名
charpath[4096]={0};
s
您可能关注的文档
最近下载
- 装饰图案概述.ppt VIP
- 香港中學會考試題(甲部).doc VIP
- 德阳市城市道路更新技术导则(2022).pdf
- 2023年香港亚洲国际数学奥林匹克公开赛(AIMO)竞赛复赛数学试卷.doc VIP
- “双减”背景下家长的教育焦虑及消解路径.docx VIP
- 装饰图案第6章 装饰图案色彩.ppt VIP
- 海尔基于工业4.0智能制造工厂服务平台智能柔性生产线方案(224页).ppt VIP
- 装饰图案第8章 装饰图案与应用设计.ppt VIP
- 房屋市政工程生产安全重大事故隐患判定标准(2024版)危险性较大的分部分项工程专项施工方案严重缺陷清单解读.pdf VIP
- 装饰图案第5章 装饰图案的造型、构图及组织形式.ppt VIP
文档评论(0)