写my_ls过程中的几个点
来源:互联网 发布:cydia软件源微信抢红包 编辑:程序博客网 时间:2024/06/01 22:42
首先是参数的解析,尽管此次仅要求完成ls三个功能选项,但是即便只有三个功能选项,加上n个文件路径的参数, 手动解析这样的参数还是动作有点多.
还好,Linux提供了一个专门用于解析命令的函数:
getopt()
示例如下:
#include<stdio.h>#include<unistd.h>int main(int argc , char ** argv){ int oc; char ec; while((oc = getopt(argc,argv,"laR")) != -1){ switch(oc){ case 'l': printf("有l选项\n"); break; case 'a' : printf("有a选项\n"); break; case 'R' : printf("有R选项\n"); break; case '?' : printf("不支持的参数\n"); break; } }}
getopt()函数每次执行从参数argv中解析出来一个第三个参数包含的选项,并返回,处理完成后 ,它会将原参数中的选项移动到所有参数的最前面.
例如:
执行: my_ls /home -a
int ch;ch = getopt(argc,argv,"aRl");
完成后,ch的值为a
argv变为 {“my_ls\0”,”-a\0”,”/home\0”}
然后关于递归显示文件夹的过程中,需要保存各级文件夹的完整路径,如果按照固定大小的数组来保存的话,大概递归到第7层就会爆堆栈,因此在递归过程中,使用结合目录下文件/目录数目以及最长文件名来动态申请的二级数组,在当前函数完成后立即释放相关数据,即可做到完整递归 / 目录. 相关代码如下
申请过程:
DIR *dir; struct dirent *ptr; int count = 0; int i = 0 ; char **filename; struct stat buf; g_maxlen = 0; //获取给定文件夹下的文件数目和最长文件名 dir = opendir(path); if (dir == NULL) { if(errno == 13){ printf("my_ls: 无法打开目录 '%s' :权限不够\n",path); return; } } while ((ptr = readdir(dir)) != NULL) { if (g_maxlen < strlen(ptr->d_name)) { g_maxlen = strlen(ptr->d_name); } count++; } closedir(dir); filename = (char **) malloc(sizeof(void *) * count); if(filename == NULL) my_err("内存申请失败",__LINE__); for (i = 0; i < count; i++) { filename[i] = (char *) malloc(strlen(path) + g_maxlen + 2); if(filename[i] == NULL) my_err("内存申请失败",__LINE__); }
释放过程
for(i = 0; i < count; i++){ free(filename[i]); } free(filename);
阅读全文
0 0
- 写my_ls过程中的几个点
- 讲解网络推广过程中的几个关键点
- 彻底弄清Hive安装过程中的几个疑问点
- MVC中的几个细节点
- html/css基础篇——html代码编写过程中的几个警惕点
- 利用sql server2000 查询过程中 写的几个函数和在.NET中的执行
- 敏捷开发过程的几个关键点
- 开发软件过程中的几个版本
- 从今天开始,以后尽量写点自己学习过程中的问题与解决方法
- 几个C语言中的易混淆点
- EL 表达式学习中的 几个注意点。
- C/C++中的几个小语法点
- java中的几个循环的注意点
- React 开发中的几个注意点
- ArrayList, LinkedList, HashMap中的几个点
- Mybatis分页实现中的几个注意点
- 写程序过程中的思考
- 社保统计软件中的几个过程
- JAVA企业面试题精选 Java SE 61-70
- 数据库的ACID
- 第三方水波纹效果
- DC
- 二维数组中的查找
- 写my_ls过程中的几个点
- 联想拯救者Ubontu系统WiFi不能用
- 深入理解计算机系统
- 正则表达式
- Poj1383
- Dedecms网站的备份和项目上传服务器
- Hibernate Session
- Dedecms网站的安全设置
- 软件测试用例设计之微信群抢红包经典用例