linux系统下ls -r命令的简单实现(补充部分)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux系统下ls -r命令的简单实现(补充部分),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1541字,纯文字阅读大概需要3分钟。
内容图文
![linux系统下ls -r命令的简单实现(补充部分)](/upload/InfoBanner/zyjiaocheng/931/2ddb821ec58c4e03ba7aaf2d10ad8d9f.jpg)
缘由
如果你看懂了我的上一篇关于ls -r命令简单实现的文章后,一定会发现上一篇文章中的程序有着巨大的缺陷,因为在上一篇文章的程序中,程序执行结束后,我并没有释放存储文件和文件夹名的动态内存分配的空间,这篇是对我上一篇文章的补充,不仅修复了缺陷,而且加入了能输出 . 和 . . 文件夹名的功能,同样, . 和 . . 文件夹名我并没有存储。
// lsr.h
void file_info_list_clear(file_info_list*); // 放入lsr.h头文件中
// lsr.c
void print(file_info_list *beg, int num) // 修改后的print函数
{
for (int i = 0; i < num; ++i) // 加入了这6行代码
printf("\t");
printf(".\n");
for (int i = 0; i < num; ++i)
printf("\t");
printf("..\n");
while (beg != NULL) {
for (int i = 0; i < num; ++i)
printf("\t");
printf("%s", beg->name);
if (beg->dir != NULL) {
printf(" :\n");
print(beg->dir, num+1);
} else {
printf("\n");
}
beg = beg->file;
}
return;
}
void clear(void) // clear函数修改后
{
while (begin != NULL) {
#ifdef TEST
printf("path space free : %s\n", begin->ptr);
#endif
need_free_list *net = begin->next;
free(begin->ptr);
free(begin);
begin = net;
}
file_info_list_clear(head.dir); // 加入了对file_info_list_clear函数的调用
return;
}
void file_info_list_clear(file_info_list *beg) // 递归函数 目的是释放为了存储文件和文件夹名
{ // 而动态内存分配的空间
while (beg != NULL) {
if (beg->dir != NULL)
file_info_list_clear(beg->dir);
file_info_list *next = beg->file;
#ifdef TEST
printf("%s : clear!\n", beg->name); // 测试代码 确定内存正确释放
#endif
free(beg->name);
free(beg);
beg = next;
}
return;
}
内容总结
以上是互联网集市为您收集整理的linux系统下ls -r命令的简单实现(补充部分)全部内容,希望文章能够帮你解决linux系统下ls -r命令的简单实现(补充部分)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。